首页 > 代码库 > codeforces--283--
codeforces--283--
这场比以往的难点额= =
A题就是 每次删掉2-N-1这(N-2)位置上的一个元素 然后观察 max(a[i]-a[i-1])。
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int a[110]; 6 7 int main() 8 { 9 int n , ans , sum;10 sum = 11111111;11 ans = 0;12 cin >> n;13 cin >> a[1];14 for( int i = 2 ; i<=n ; i++ )15 {16 cin >> a[i];17 ans = max( ans , a[i]-a[i-1] );18 }19 for( int i = 2 ; i<=n-1 ; i++ )20 {21 sum = min( sum , a[i+1] - a[i-1] );22 }23 cout << max(sum,ans) << endl;24 return 0;25 }
B题 add操作最多执行10次 每一次操作完成之后 再对整个字符串进行 循环移位
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 string ans , str; 6 7 void solve( ) 8 { 9 string s , t;10 char ch;11 int len = str.length();12 int temp;13 for( int T = 1 ; T<=10 ; T++ )14 {15 s = "";16 for( int i = 0 ; i<len ; i++ )17 {18 temp = (str[i]-‘0‘+T)%10;//char转int19 ch = temp + ‘0‘;//int转char20 s += ch;21 }22 if( s<ans )23 ans = s;24 for( int j = 1 ; j<len ; j++ )25 {26 t = "";27 t.append(s,j,len-j);28 t.append(s,0,j);29 if( t<ans )30 ans = t;31 }32 }33 }34 35 int main()36 {37 int n;38 cin >> n;39 cin >> str;40 ans = str;41 solve( ); 42 cout << ans << endl;43 }
C题 每次只能删除一列上的所有元素 字典序的排列是对行进行要求的 所以暴力遍历过去就好 注意标记
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 int n , m , cnt; 6 const int size = 110; 7 char str[size][size]; 8 bool can[size]; 9 10 void solve()11 {12 bool flag;13 cnt = 0;14 memset( can , false , sizeof(can) );15 for( int i = 0 ; i<m ; i++ )16 {17 flag = true;18 for( int j = 0 ; j<n-1 ; j++ )19 {20 if( !can[j] && str[j][i] > str[j+1][i] )21 {22 ++ cnt;23 flag = false;24 break;25 }26 }27 if( flag )28 {29 for( int j = 0 ; j<n-1 ; j++ )30 {31 if( str[j][i] < str[j+1][i] )32 {33 can[j] = true; 34 }35 }36 }37 }38 }39 40 int main()41 {42 cin >> n >> m;43 for( int i = 0 ; i<n ; i++ )44 {45 cin >> str[i];46 }47 solve();48 cout << cnt << endl;49 return 0;50 }
D题 porker说是个大模拟 我不会= =
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 6 class data { 7 public: 8 int s, t; 9 bool operator<(const data& p) const {10 if (s < p.s) return true;11 else if (s == p.s && t < p.t) return true;12 else return false;13 }14 };15 16 int sum[2][100100];17 data ans[100100];18 int counts;19 20 int main() {21 int n;22 cin.sync_with_stdio(false);23 cin >> n;24 sum[0][0] = sum[0][1] = 0;25 for (int i = 1; i <= n; i++) {26 int d;27 cin >> d;28 d--;29 sum[0][i] = sum[0][i - 1];30 sum[1][i] = sum[1][i - 1];31 sum[d][i]++;32 }33 counts = 0;34 int maximum = max(sum[0][n], sum[1][n]);35 for (int i = 1; i <= maximum; i++) {36 int sets[2] = { 0, 0 };37 int index = 0;38 int interval = i * 2;39 bool flag = true;40 int lastwin = -1;41 while (index < n) {42 int nextindex = index + interval;43 int maxindex = index + interval;44 if (maxindex > n + 1) {45 maxindex = n + 1;46 }47 int first_index = lower_bound(sum[0] + index + 1, sum[0] + maxindex, sum[0][index] + i) - sum[0];48 int second_index = lower_bound(sum[1] + index + 1, sum[1] + maxindex, sum[1][index] + i) - sum[1];49 if (first_index < second_index) {50 sets[0]++;51 lastwin = 0;52 }53 else if (second_index < first_index) {54 sets[1]++;55 lastwin = 1;56 }57 else {58 flag = false;59 }60 index = min(first_index, second_index);61 }62 if (!flag) continue;63 if (sets[0] > sets[1] && lastwin == 0 || sets[0] < sets[1] && lastwin == 1) {64 ans[counts].s = max(sets[0], sets[1]);65 ans[counts].t = i;66 counts++;67 }68 }69 sort(ans, ans + counts);70 cout << counts << endl;71 for (int i = 0; i < counts; i++) {72 cout << ans[i].s << " " << ans[i].t << endl;73 }74 // system("pause");75 }
codeforces--283--
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。