Codeforces Round #137 (Div. 2)
阿新 • • 發佈:2018-12-24
哎、、 好水啊 準備敲之前一定要想好思路、、、到快結束的時候思路才對、、而且有個JR還總cha我、、最後依然一題悲劇、、
A. Shooshuns and Sequence
題意:大水、就是把當前kth位置的數字複製到最後,然後刪除第一個數字,求最小運算元能把序列變為所有位置的數字都相同。
思路:開始腦子進水,寫模擬。。。然後變換一次check一次、、果斷悲劇好久,後來看看發現點端倪,初始位置kth一直到最後如果不是全一樣的數字怎麼變換都不行,然後在這基礎上找到kth前第一個與kth不相同的數字的位置就是最小運算元。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[100010]; int main() { int i , n , k; while(~scanf("%d%d",&n,&k)) { for(i = 1 ; i <= n ; i ++) scanf("%d",&a[i]); for(i = k ; i <= n ;i ++) { if(a[i]!=a[k]) break; } if(i<n+1) printf("-1\n"); else{ for(i = k ; i >= 1; i --) { if(a[i]!=a[k]) {printf("%d\n",i);break;} } if(i < 1) printf("0\n"); } } }
B.
Cosmic Tables
題意:操作 r num1 num2 , c num2 num2 分別是把矩陣的行列互換,然後g num1 num2 是輸出當前矩陣的a[num1][num2]...
思路:腦子進水,開始竟然暴力,不T死就怪了。。。用r[x]和c[y]記錄當前x y 在初始陣列a上的對映就可以了、、、
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[1010][1010]; int r[1010] , c[1010]; int n , m; int main() { int k; while(~scanf("%d%d%d",&n,&m,&k)) { int i , j; for(i = 1 ; i <= n ; i ++) for(j = 1 ; j <= m ; j ++) scanf("%d",&a[i][j]); char que[4]; int x , y; for(i = 1 ; i <= n ; i ++) r[i] = i; for(i = 1 ; i <= m ; i ++) c[i] = i; int xx , yy; while(k --) { scanf("%s %d %d",que,&x,&y); if(que[0]=='r') { xx = r[x]; yy = r[y]; r[x] = yy; r[y] = xx; } else if(que[0]=='c') { xx = c[x]; yy = c[y]; c[x] = yy; c[y] = xx; } else printf("%d\n",a[r[x]][c[y]]); } } }
其它題,就看了看E 沒思路。。哎 無力啊 、、、