首页 > 代码库 > 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 }
View Code

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 }
View Code

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 }
View Code

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 }
View Code

 

codeforces--283--