Untitled
unknown
plain_text
a year ago
8.2 kB
6
Indexable
#include <iostream>
using namespace std;
int a[4], b[4], cnt[1000];
int temp;
void init(int mCnt1, int mDigitList1[30000], int mCnt2, int mDigitList2[30000]){
for(int i=0; i<1000; i++) {
cnt[i] = 0;
}
temp = 0;
a[0] = mDigitList1[0];
a[1] = mDigitList1[1];
a[2] = mDigitList1[mCnt1 - 2];
a[3] = mDigitList1[mCnt1 - 1];
b[0] = mDigitList2[0];
b[1] = mDigitList2[1];
b[2] = mDigitList2[mCnt2 - 2];
b[3] = mDigitList2[mCnt2 - 1];
for(int i = 0; i < mCnt1 - 2; i++) {
temp = mDigitList1[i] * 100 + mDigitList1[i+1] * 10 + mDigitList1[i+2];
cnt[temp]++;
}
for(int i = 0; i < mCnt2 - 2; i++) {
temp = mDigitList2[i] * 100 + mDigitList2[i+1] * 10 + mDigitList2[i+2];
cnt[temp]++;
}
temp = a[2] * 100 + a[3] * 10 + b[0];
cnt[temp]++;
temp = a[3] * 100 + b[0] * 10 + b[1];
cnt[temp]++;
}
void append(int mDir, int mNum1, int mNum2){
// Xóa các cặp số cũ o giữa trước khi thêm mới
temp = a[2] * 100 + a[3] * 10 + b[0];
cnt[temp]--;
temp = a[3] * 100 + b[0] * 10 + b[1];
cnt[temp]--;
if(mDir == 0) { //left
if(mNum1 < 10) {
temp = mNum1 * 100 + a[0] * 10 + a[1];
cnt[temp]++;
a[1] = a[0];
a[0] = mNum1;
}
else if(mNum1 < 100 && mNum1 >= 10) {
temp = (mNum1 / 10) * 100 + (mNum1 % 10) * 10 + a[0];
cnt[temp]++;
temp = (mNum1 % 10) * 100 + a[0] * 10 + a[1];
cnt[temp]++;
a[1] = mNum1 % 10;
a[0] = mNum1 / 10;
}
else if(mNum1 < 1000 && mNum1 >= 100) {
cnt[mNum1]++;
temp = ((mNum1 / 10) % 10) * 100 + (mNum1 % 10) * 10 + a[0];
cnt[temp]++;
temp = (mNum1 % 10) * 100 + a[0] * 10 + a[1];
cnt[temp]++;
a[1] = (mNum1 / 10) % 10;
a[0] = mNum1 / 100;
}
else if(mNum1 >= 1000 && mNum1 < 10000) {
int nghin = mNum1 / 1000;
int tram = (mNum1 / 100) % 10;
int chuc = (mNum1 / 10) % 10;
int donvi = mNum1 % 10;
temp = mNum1 / 10;
cnt[temp]++;
temp = tram * 100 + chuc * 10 + donvi;
cnt[temp]++;
temp = chuc * 100 + donvi * 10 + a[0];
cnt[temp]++;
temp = donvi * 100 + a[0] * 10 + a[1];
cnt[temp]++;
a[0] = nghin;
a[1] = tram;
}
//Update Num2 (left)
if(mNum2 < 10) {
temp = a[2] * 100 + a[3] * 10 + mNum2;
cnt[temp]++;
temp = a[3] * 100 + mNum2 * 10 + b[0];
cnt[temp]++;
temp = mNum2 * 100 + b[0] * 10 + b[1];
cnt[temp]++;
b[1] = b[0];
b[0] = mNum2;
}
else if(mNum2 >= 10 && mNum2 < 100) {
int chuc = mNum2 / 10;
int donvi = mNum2 % 10;
temp = a[2] * 100 + a[3] * 10 + chuc;
cnt[temp]++;
temp = a[3] * 100 + chuc * 10 + donvi;
cnt[temp]++;
temp = chuc * 100 + donvi * 10 + b[0];
cnt[temp]++;
temp = donvi * 100 + b[0] * 10 + b[1];
cnt[temp]++;
b[0] = chuc;
b[1] = donvi;
}
else if(mNum2 < 1000 && mNum2 >= 100) {
int tram = mNum2 / 100;
int chuc = (mNum2 / 10) % 10;
int donvi = mNum2 % 10;
temp = a[2] * 100 + a[3] * 10 + tram;
cnt[temp]++;
temp = a[3] * 100 + tram * 10 + chuc;
cnt[temp]++;
cnt[mNum2]++;
temp = chuc * 100 + donvi * 10 + b[0];
cnt[temp]++;
temp = donvi * 100 + b[0] * 10 + b[1];
cnt[temp]++;
b[0] = tram;
b[1] = chuc;
}
else if(mNum2 >= 1000 && mNum2 < 10000) {
int nghin = mNum2 / 1000;
int tram = (mNum2 / 100) % 10;
int chuc = (mNum2 / 10) % 10;
int donvi = mNum2 % 10;
temp = a[2] * 100 + a[3] * 10 + nghin;
cnt[temp]++;
temp = a[3] * 100 + nghin * 10 + tram;
cnt[temp]++;
temp = mNum2 / 10;
cnt[temp]++;
temp = mNum2 - nghin * 1000;
cnt[temp]++;
temp = chuc * 100 + donvi * 10 + b[0];
cnt[temp]++;
temp = donvi * 100 + b[0] * 10 + b[1];
cnt[temp]++;
b[0] = nghin;
b[1] = tram;
}
}
else if(mDir == 1) { // right
if(mNum1 < 10) {
temp = a[2] * 100 + a[3] * 10 + mNum1;
cnt[temp]++;
temp = a[3] * 100 + mNum1 * 10 + b[0];
cnt[temp]++;
temp = mNum1 * 100 + b[0] * 10 + b[1];
cnt[temp]++;
a[2] = a[3];
a[3] = mNum1;
}
else if(mNum1 < 100 && mNum1 >= 10) {
int chuc = mNum1 / 10;
int donvi = mNum1 % 10;
temp = a[2] * 100 + a[3] * 10 + chuc;
cnt[temp]++;
temp = a[3] * 100 + chuc * 10 + donvi;
cnt[temp]++;
temp = chuc * 100 + donvi * 10 + b[0];
cnt[temp]++;
temp = donvi * 100 + b[0] * 10 + b[1];
cnt[temp]++;
a[2] = chuc;
a[3] = donvi;
}
else if(mNum1 < 1000 && mNum1 >= 100) {
int tram = mNum1 / 100;
int chuc = (mNum1 / 10) % 10;
int donvi = mNum1 % 10;
temp = a[2] * 100 + a[3] * 10 + tram;
cnt[temp]++;
temp = a[3] * 100 + tram * 10 + chuc;
cnt[temp]++;
cnt[mNum1]++;
temp = chuc * 100 + donvi * 10 + b[0];
cnt[temp]++;
temp = donvi * 100 + b[0] * 10 + b[1];
cnt[temp]++;
a[2] = chuc;
a[3] = donvi;
}
else if(mNum1 >= 1000 && mNum1 < 10000) {
int nghin = mNum1 / 1000;
int tram = (mNum1 / 100) % 10;
int chuc = (mNum1 / 10) % 10;
int donvi = (mNum1 % 10);
temp = a[2] * 100 + a[3] * 10 + nghin;
cnt[temp]++;
temp = a[3] * 100 + nghin * 10 + chuc;
cnt[temp]++;
temp = mNum1 / 10;
cnt[temp]++;
temp = tram * 100 + chuc * 10 + donvi;
cnt[temp]++;
temp = chuc * 100 + donvi * 10 + b[0];
cnt[temp]++;
temp = donvi * 100 + b[0] * 10 + b[1];
cnt[temp]++;
a[2] = chuc;
a[3] = donvi;
}
//Update Num2 right
if(mNum2 < 10) {
temp = b[2] * 100 + b[3] * 10 + mNum2;
cnt[temp]++;
b[2] = b[3];
b[3] = mNum2;
}
else if(mNum2 >= 10 && mNum2 < 100) {
int chuc = mNum2 / 10;
int donvi = mNum2 % 10;
temp = b[2] * 100 + b[3] * 10 + chuc;
cnt[temp]++;
temp = b[3] * 100 + chuc * 10 + donvi;
cnt[temp]++;
b[2] = chuc;
b[3] = donvi;
}
else if(mNum2 >= 100 && mNum2 < 1000) {
int tram = mNum2 / 100;
int chuc = (mNum2 / 10) % 10;
int donvi = mNum2 % 10;
temp = b[2] * 100 + b[3] * 10 + tram;
cnt[temp]++;
temp = b[3] * 100 + tram * 10 + chuc;
cnt[temp]++;
cnt[mNum2]++;
b[2] = chuc;
b[3] = donvi;
}
else if(mNum2 >= 1000 && mNum2 < 10000) {
int nghin = mNum2 / 1000;
int tram = (mNum2 /100 ) % 10;
int chuc = (mNum2 / 10) % 10;
int donvi = mNum2 % 10;
temp = b[2] * 100 + b[3] * 10 + nghin;
cnt[temp]++;
temp = b[3] * 100 + nghin * 10 + tram;
cnt[temp]++;
temp = mNum2 / 10;
cnt[temp]++;
temp = tram * 100 + chuc * 10 + donvi;
cnt[temp]++;
b[2] = chuc;
b[3] = donvi;
}
}
}
int countNum(int mNum){
/*int ans = cnt[mNum];
if(a[2] * 100 + a[3] * 10 + b[0] == mNum) ans++;
if(a[3] * 100 + b[0] * 10 + b[1] == mNum) ans++;
return ans;*/
return cnt[mNum];
}Editor is loading...
Leave a Comment