Untitled
unknown
plain_text
5 months ago
4.6 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]; for(int i=0; i<mCnt1-1; i++) { temp = mDigitList1[i] * 100 + mDigitList1[i+1] * 10 + mDigitList1[i+2]; cnt[temp]++; } for(int i=0; i<mCnt2 - 1; 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){ 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 + a[0]; cnt[temp]++; int donvi = mNum1 % 10; temp = donvi * 100 + a[0] * 10 + a[1]; cnt[temp]++; a[0] = mNum1 / 10; a[1] = donvi; } else if(mNum1 < 1000 && mNum1 >= 100) { cnt[mNum1]++; int chuc = (mNum1 / 10) % 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[0] = mNum1 / 100; a[1] = chuc; } //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(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; } //Update Num2 right; if(mNum2 < 10) { temp = b[2] * 100 + b[3] * 10 + mNum2; cnt[temp]++; a[2] = a[3]; a[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[3] = donvi; b[2] = chuc; } 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; } } } int countNum(int mNum){ return cnt[mNum]; }
Editor is loading...
Leave a Comment