📄 1007.cpp
字号:
#include <iostream>#include <string>using namespace std;const int maxL = 1000;int n, len;string ori; //下标范围 0---len-1int a_1[maxL+1], a_0[maxL+1]; //为了使用a[0],下标范围是1---lenint calcS(){ int i, s = 0; for( i = 0; i < len; i++ ) if(ori[i]=='1')s+= i+1; return s;}int calcArr(){ int i; memset( a_1,0,sizeof(a_1) ); memset( a_0,0,sizeof(a_0) ); for( i = 1; i <= len; i++ ) { a_0[i] = a_0[i-1] + ((ori[i-1] == '0') ? 1 : 0); a_1[i] = a_1[i-1] + ((ori[i-1] == '1') ? 1 : 0); }}void solve1(){ int sum = calcS(); sum %= n+1; if(sum == 0)return; ori[sum - 1] = '0';}void solve2(){ int i; string ins; int sum = calcS(); calcArr(); sum %= n+1; sum = (n+1 - sum)%(n+1); if( sum <= a_1[len] ) //insert 0 { ins = "0"; for( i = 0; i <= len; i++ ) if( sum == a_1[len] - a_1[i] ) {ori.insert(i,ins); return; } } if( sum > a_1[len] ) //insert 1 { sum = n - sum; ins = "1"; for( i = 0; i <= len; i++ ) if( sum == a_0[len] - a_0[i] ) { ori.insert(i,ins); return; } }}void solve3(){ int i; int sum = calcS(); calcArr(); sum %= n+1; if( sum == 0 ){ ori.erase(len-1);return; } if( sum <= a_1[len] ) //del 0 { for( i = 0 ; i <= len ; i++) if( sum == a_1[len] - a_1[i] ) {ori.erase( i , 1 );return;} } if( sum > a_1[len] ) //del 1 { sum = n - sum; for( i = 0 ; i <= len ; i++ ) if( sum == a_0[len] - a_0[i] ) {ori.erase( i - 2, 1 );return;} }}int main(){ int i; cin >> n; while(cin >> ori) { len = ori.length(); if( len == n ) solve1(); else if( len == n-1 ) solve2(); else if( len == n+1 ) solve3(); else continue; cout << ori << endl; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -