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 |
Re:为什么我的程序(本地)在G++下Sample1有问题,在VC下没问题,提交时WA?In Reply To:为什么我的程序(本地)在G++下Sample1有问题,在VC下没问题,提交时WA? Posted by:sinkingship at 2006-02-19 20:58:35 > 郁闷 忘了copy程序 #include <vector> #include <string> #include <algorithm> #include <cmath> #include <iostream> using namespace std; #define max(a,b) ((a)>(b)?(a):(b)) struct RLNode{ int data; int length; RLNode(){} RLNode( int d, int l ){ data = d; length = l; } }; int width; vector<RLNode> input; vector<RLNode> output; int i , j ; vector<int> rescache1, rescache2; vector<int> linecache1, linecache2; void getline( vector<int>& ret ){ for(int k=0;k<width;k++){ ret[k] = input[i].data; j++; if(j>=input[i].length){ i++; j=0; } } } void push( const vector<int>& s ){ for(int k=0;k<s.size();){ int cnt = 1; while(cnt<s.size() && s[k]==s[k+cnt]) cnt++; output.push_back( RLNode(s[k],cnt) ); k+=cnt; } } void simplify(){ for(int k=1;k<output.size();k++) if( output[k].data == output[k-1].data ){ output[k-1].length+=output[k].length; output.erase( output.begin()+k ); k--; } } void answer(){ cout<<width<<endl; for(int i=0;i<output.size();i++){ cout<<output[i].data<<' '<<output[i].length<<endl; } cout<<"0 0"<<endl; } void work(){ i = j = 0; rescache1.resize(width); rescache2.resize(width); linecache1.resize(width); linecache2.resize(width); bool pre = false; vector<int>* prline = &linecache1, *line = &linecache2; vector<int>* last = &rescache1, *now = &rescache2; while(1){ if(i>=input.size()) break; if(j>=width && input[i].length-j>=width*2) { push(*last); int x = (input[i].length-j-width)/width*width; output.push_back( RLNode(0, x) ); j += x; pre = false; continue; } getline(*line); fill( (*now).begin(), (*now).end(), (int)0 ); for(int k=0;k<width;k++) { if(pre){ (*now)[k] = max( abs( (*prline)[k]-(*line)[k] ) , (*now)[k] ); (*last)[k] = max( abs( (*prline)[k]-(*line)[k] ) , (*last)[k] ); if(k>0){ (*now)[k] = max( abs( (*prline)[k-1]-(*line)[k] ), (*now)[k] ); (*last)[k-1] = max( abs( (*prline)[k-1]-(*line)[k] ), (*last)[k-1] ); } } if(k>0){ (*now)[k] = max( abs( (*line)[k]-(*line)[k-1] ) , (*now)[k] ); (*now)[k-1] = max( abs( (*line)[k]-(*line)[k-1] ) , (*now)[k-1] ); } } if(pre) push(*last); swap(last, now); swap(prline,line); pre = true; } push(*last); simplify(); answer(); } int main(){ while(1){ cin>>width; if(width<=0) { cout<<0<<endl; break; } input.clear(); int c, l; while(1){ cin>>c>>l; if(c==0) break; input.push_back( RLNode(c,l) ); } output.clear(); work(); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator