B. One Bombtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard output
?
題意:你有一個炸彈,可以放在任意位置并炸掉該位置所在的行和列上的墻“*”,求一顆炸彈是否能炸掉所有的墻。
我們可以將每行和每列的墻數分別存入數組x[]和y[]。每當a[i][j]的位置是"*"時,x[i]++,y[j]++;最后再將x[i]+y[j]與總墻數sum比較。
注意:當炸彈所在點為“*”時,需x[i]+y[j]-1;
?
附AC代碼:
1 #include<iostream> 2 #include<cstring> 3 4 using namespace std; 5 6 int N,M,ans; 7 int a[1002][1002],x[1002],y[1002]; 8 char s[200010]; 9 10 void process(){ 11 scanf("%d %d",&N,&M); 12 int cnt = 0; 13 for(int i=1; i<=N; i++){ 14 scanf("%s",s); 15 for(int j=1; j<=M; j++){ 16 if(s[j-1] == '*'){ 17 x[i]++; 18 y[j]++; 19 cnt++; 20 a[i][j] = 1; 21 } 22 } 23 } 24 for(int i=1; i<=N; i++){ 25 for(int j=1; j<=M; j++){ 26 int t; 27 t = x[i]+y[j]; 28 if(a[i][j] == 1) t--;//重復一個 29 if(t == cnt){ 30 printf("YES\n%d %d\n",i,j); 31 return; 32 } 33 } 34 } 35 printf("NO\n"); 36 } 37 38 int main(){ 39 process(); 40 return 0; 41 }
?