codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <bits/stdc++.h> using namespace std; int censor[1234]; string decode; vector < string > vc; map <string , string >mp; bool isReverse ( long n ){ int start[] = {0,0,1,1,0}; for( int i=n,j=0; i>=(n-4); j++,i-- ){ if(start[j] != censor[i])return false; } return true; } bool isRight ( long n ){ bool start[] = {0,0,1,1,0}; for( int i=1,j=0; i<=(5); j++,i++ ){ if(start[j] != censor[i])return false; } return true; } void init(){ mp ["00001"] = "0"; mp ["10001"] = "1"; mp ["01001"] = "2"; mp ["11000"] = "3"; mp ["00101"] = "4"; mp ["10100"] = "5"; mp ["01100"] = "6"; mp ["00011"] = "7"; mp ["10010"] = "8"; mp ["10000"] = "9"; mp ["00100"] = "-"; mp ["00110"] = "S"; } int gen_c( int n ){ long sum = 0; for(int i=1; i<=n; i++){ int wci = ((decode[i] == '-') ? 10 : decode[i]-'0'); sum += ((((n-i)%10)+1) * wci); } return (sum % 11); } int gen_k( int n , int c ){ // send n+1 for calculating C long sum = 0; for(int i=1; i<=n; i++){ int wci = ((decode[i] == '-') ? 10 : decode[i]-'0'); sum += ((((n-i+1)%9)+1) * wci); } int wci = ((c == '-') ? 10 : c); sum += ((((0)%9)+1) * wci); return (sum %= 11); } int percent ( int n ){ return ceil( (long) (n*5.00/100.00))+1; } int main() { // freopen("in.txt","rt",stdin); // freopen("out.txt","wt",stdout); init(); long m,tc=0; while ( scanf("%ld",&m),m ){ decode = ""; int once = (1 << 16) , twice = -(1 << 16) ; for ( int i=1; i<=m; i++ ){ scanf("%d",&censor[i]); once = ( censor[i] < once ) ? censor[i] : once; twice = ( censor[i] > twice ) ? censor[i] : twice; } /// Start working from here idiot .. Start fresh // cout << percent( ) << endl; int range1 = once - (percent(once)); int range2 = once + (percent(once)); int ra1 = once * 2; int par1 = twice - percent(twice); int par2 = twice + percent(twice); cout << ra1 << endl; for ( int i=1; i<=m; i++ ) { if( (censor[i]>= range1 && censor[i] <= range2) && (censor[i] < ra1)) censor[i] = 0; else if((censor[i] >= par1) && (censor[i] <= par2) ) censor[i] = 1; else { printf("Case %d: bad code\n",++tc); break; } //censor[i] = ( censor[i] == once ) ? 0 : 1 ; // cout << i << " " << censor[i] << endl; } bool r = isReverse( m ); // for(int i=1; i<=m; i++) { // printf("%2d",censor[i]); // if(!(i%10))cout << endl; // } // cout << endl << r << " " << isRight(m) << endl; if( (!r && !isRight(m)) ){ printf("Case %d: bad code\n",++tc); continue; } int exit = 0; if( r ){ for ( int i=m-5; i>=1; i-=6) censor[i] = 5; string s1 = ""; for(int i=m; i>=1; i-- ){ if(censor[i] > 1 ){ if( mp[s1] == ""){ printf("Case %d: bad code\n",++tc); exit = 1; break; } decode += (mp[s1]) ; s1 = ""; } else s1 += (censor[i]+'0'); } if( mp[s1] == "" && !exit){ printf("Case %d: bad code\n",++tc); exit = 1; break; } decode += (mp[s1]) ; s1 = ""; } else { for ( int i=6; i<=m; i+=6){ censor[i] = 5; } string s1 = ""; for(int i=1; i<=m; i++ ){ if(censor[i] > 1 ){ if( mp[s1] == ""){ printf("Case %d: bad code\n",++tc); exit = 1; break; } // cout << "s = " << mp[s1] << endl; decode += (mp[s1]) ; s1 = ""; } else s1 += (censor[i]+'0'); } if( mp[s1] == "" && !exit){ printf("Case %d: bad code\n",++tc); exit = 1; break; } decode += (mp[s1]) ; // cout << "s = " << mp[s1] << endl; s1 = ""; } if(exit)continue; int sz = decode.size(); // cout << decode[0] << decode[sz-1] << endl; // cout << "fuck" << endl; //cout << sz << endl; int cc = gen_c( sz-4); int ck = (decode[sz-3]-'0'); int kk ; // cout << cc << endl; if(decode[0] != 'S' || decode[sz-1] != 'S' || sz <= 4){ printf("Case %d: bad code\n",++tc); continue; } if( cc == ck || ( cc==10 && decode[sz-3] == '-')){ kk = gen_k(( sz-4),cc ); if(kk == (decode[sz-2] - '0') || (kk == 10 && decode[sz-2] == '-')){ printf("Case %d: ",++tc); for(int i=1; i<=sz-4; i++){ if(decode[i] != 'S') printf("%c",decode[i]); } puts(""); } else printf("Case %d: bad K\n",++tc); } else printf("Case %d: bad C\n",++tc); // cout << endl << decode << " " << cc << " " << kk << " " << endl; decode = ""; } return 0; }
Private
[
?
]
Run code
Submit