Untitled
unknown
plain_text
a year ago
6.2 kB
4
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];
// Đếm các chuỗi 3 số liên tiếp trong mảng thứ nhất
for(int i = 0; i < mCnt1 - 2; i++) {
temp = mDigitList1[i] * 100 + mDigitList1[i+1] * 10 + mDigitList1[i+2];
cnt[temp]++;
}
// Đếm các chuỗi 3 số liên tiếp trong mảng thứ hai
for(int i = 0; i < mCnt2 - 2; i++) {
temp = mDigitList2[i] * 100 + mDigitList2[i+1] * 10 + mDigitList2[i+2];
cnt[temp]++;
}
// Đếm chuỗi số ở vị trí nối giữa hai mảng
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ũ tại vị trí nối giữa hai mảng
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
// Xử lý mNum1
if(mNum1 < 10) {
temp = mNum1 * 100 + a[0] * 10 + a[1];
cnt[temp]++;
a[1] = a[0];
a[0] = mNum1;
}
else if(mNum1 < 100) {
int chuc = mNum1 / 10;
int donvi = mNum1 % 10;
temp = chuc * 100 + donvi * 10 + a[0];
cnt[temp]++;
temp = donvi * 100 + a[0] * 10 + a[1];
cnt[temp]++;
a[1] = donvi;
a[0] = chuc;
}
else {
int tram = mNum1 / 100;
int chuc = (mNum1 / 10) % 10;
int donvi = mNum1 % 10;
cnt[mNum1]++;
temp = chuc * 100 + donvi * 10 + a[0];
cnt[temp]++;
temp = donvi * 100 + a[0] * 10 + a[1];
cnt[temp]++;
a[1] = chuc;
a[0] = tram;
}
// Xử lý mNum2
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 < 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 {
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 { // right
// Xử lý mNum1
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) {
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 {
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;
}
// Xử lý mNum2
if(mNum2 < 10) {
temp = b[0] * 100 + b[1] * 10 + mNum2; // Sửa lại công thức tính
cnt[temp]++;
b[3] = mNum2;
b[2] = b[1];
b[1] = b[0];
}
else if(mNum2 < 100) {
int chuc = mNum2 / 10;
int donvi = mNum2 % 10;
temp = b[0] * 100 + b[1] * 10 + chuc; // Sửa lại công thức tính
cnt[temp]++;
temp = b[1] * 100 + chuc * 10 + donvi; // Sửa lại công thức tính
cnt[temp]++;
b[3] = donvi;
b[2] = chuc;
b[1] = b[0];
}
else {
int tram = mNum2 / 100;
int chuc = (mNum2 / 10) % 10;
int donvi = mNum2 % 10;
temp = b[0] * 100 + b[1] * 10 + tram; // Sửa lại công thức tính
cnt[temp]++;
temp = b[1] * 100 + tram * 10 + chuc; // Sửa lại công thức tính
cnt[temp]++;
cnt[mNum2]++;
b[3] = donvi;
b[2] = chuc;
b[1] = tram;
}
}
}
int countNum(int mNum){
return cnt[mNum];
}Editor is loading...
Leave a Comment