Untitled
unknown
plain_text
5 months ago
6.2 kB
3
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