Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
求可以使这个程序求出错误答案的数据Source Code Problem: 2886 User: jibee Memory: N/A Time: N/A Language: C++ Result: Wrong Answer Source Code #include <iostream> #include <cmath> #include <fstream> using std::cout; using std::endl; using std::ifstream; using std::cin; // const int MAXLENGTH = 12; const int MAXNUM = 500001; const int ITEMNUM = 37; struct Node{ int left; int right; int idx; // 0 represent internal node }; char name[MAXNUM][MAXLENGTH]; int turn[MAXNUM]; Node* child; int (*tableItem)[2]; int n; int curN; int nameStart; int totalFloor; int targetItemIdx; int curTurn; int buildIdx; void build( int node, int num ){ if( num <= 0 ) return; if( num == 1 ){ child[node].left = 0; child[node].right = 0; child[node].idx = ++buildIdx; return; } int m = num / 2; child[node].left = m; child[node].right = num - child[node].left; child[node].idx = 0; build( node * 2, child[node].left ); build( node * 2 + 1, child[node].right ); return; } int pick( int localTurn, int node ){ if( child[node].idx != 0 ){ curN --; if( n - curN == tableItem[targetItemIdx][0] ) { cout << name[child[node].idx] << ' ' << tableItem[targetItemIdx][1] << endl; return 0; } else{ if( turn[child[node].idx] > 0 ){ return (curTurn -2 + turn[child[node].idx]) % curN + 1 ; } else{ return curN - (( curN - curTurn ) - turn[child[node].idx] ) % curN ; } } } else{ if( child[node].left >= localTurn ){ child[node].left--; return pick( localTurn, node * 2 ); } else{ child[node].right--; return pick( localTurn - child[node].left, node * 2 + 1 ); } } } int main(){ //ifstream cin( "in.txt" ); child = new Node[MAXNUM * 3]; //clock_t start = clock(); int theTableItem[ITEMNUM + 1][2] = { 1,1,2,2,4,3,6,4,12,6,24,8,36,9,48,10,60,12, 120,16,180,18,240,20,360,24,720,30,840,32, 1260,36,1680,40,2520,48,5040,60,7560,64, 10080,72,15120,80,20160,84,25200,90,27720,96, 45360,100,50400,108,55440,120,83160,128, 110880,144,166320,160,221760,168,277200,180, 332640,192,498960,200, 554400,216, 665280, 224 }; tableItem = theTableItem; // cout << table[MAXNUM -1][0] << endl; //cout << "time_used:" << clock() - start << endl; int k; while( !cin.eof()){ cin >> n >> k; //cin.ignore(); curN = n; for( int i = 1; i <= n; i ++ ){ cin >> name[i] >> turn[i]; } int l = -1; int r = ITEMNUM + 1; while( l != r -1 ){ int m = ( l + r )/ 2; if( n >= tableItem[m][0] ) l = m; else r = m; } targetItemIdx = l; buildIdx = 0; build( 1, n ); curTurn = k; while( curTurn != 0 ){ curTurn = pick( curTurn, 1 ); } } delete []child; child = 0; //system( "pause" ); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator