标签:
A题:
题意:给定一些数,给定一些往左走和往右走的操作,问是否能够相遇,如果相遇请求出相遇时间
分析:对于相邻两个数,如果大的往左,小的往右就能够相遇,否则不能相遇,在求出所有相遇当中的第一次相遇即可
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 const int maxn=200050; 15 const int INF=1<<30; 16 int a[maxn]; 17 int n; 18 int main() 19 { 20 while(cin>>n) 21 { 22 string s; 23 cin>>s; 24 for(int i=0;i<n;i++) 25 cin>>a[i]; 26 int flag=0; 27 int k; 28 int minx=INF; 29 for(int i=0;i<n-1;i++) 30 { 31 int flag1=0; 32 if(s[i]==‘R‘&&s[i+1]==‘L‘&&a[i]<a[i+1]) 33 { 34 flag=1; flag1=1; 35 } 36 else if(s[i]==‘L‘&&s[i+1]==‘R‘&&a[i]>a[i+1]){ 37 flag=1; flag1=1; 38 } 39 if(flag1){ 40 int maxt=max(a[i],a[i+1]); 41 int mint=min(a[i],a[i+1]); 42 int t=(maxt-mint)/2; 43 if(t<minx) 44 minx=t; 45 } 46 } 47 if(flag) { 48 cout<<minx<<endl; 49 }else 50 { 51 cout<<"-1"<<endl; 52 } 53 } 54 return 0; 55 }
B题:
题意:*代表墙,.代表空地,一个炸弹能够炸掉横竖各一列的墙,问能否通过一枚炸弹,让所有全部变成平地
分析:这是一道Hack点极多的题,我就因为这题被Hack了,Ranting一朝回到解放前。直接模拟即可,但是要注意两种情况,一个是没有一个格子是墙壁的情况,还有一种选择放置炸弹的点不是墙壁的情况
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 const int maxn=1100; 15 int n,m; 16 int vis[maxn],d[maxn]; 17 int main() 18 { 19 while(cin>>n>>m) 20 { 21 char s[maxn][maxn]; 22 for(int i=0;i<n;i++) 23 cin>>s[i]; 24 int flag1=0; 25 for(int i=0;i<n;i++){ 26 for(int j=0;j<m;j++){ 27 if(s[i][j]==‘*‘){ 28 flag1=1; break; 29 } 30 } 31 } 32 if(!flag1){ 33 cout<<"YES"<<endl; 34 cout<<"1"<<" "<<"1"<<endl; 35 continue; 36 } 37 memset(vis,0,sizeof(vis)); 38 memset(d,0,sizeof(d)); 39 int flag=0; 40 int cnt=0; 41 for(int i=0;i<n;i++) 42 { 43 for(int j=0;j<m;j++){ 44 if(s[i][j]==‘*‘){ 45 vis[i]++; 46 d[j]++; 47 cnt++; 48 } 49 } 50 } 51 int h,k; 52 for(int i=0;i<n;i++){ 53 for(int j=0;j<m;j++){ 54 if(s[i][j]==‘*‘){ 55 if(vis[i]+d[j]==cnt+1){ 56 h=i; k=j; flag=1; break; 57 } 58 }else if(s[i][j]==‘.‘){ 59 if(vis[i]+d[j]==cnt){ 60 h=i;k=j; flag=1; break; 61 } 62 } 63 } 64 if(flag) break; 65 } 66 if(flag){ 67 cout<<"YES"<<endl; 68 cout<<h+1<<" "<<k+1<<endl; 69 }else{ 70 cout<<"NO"<<endl; 71 } 72 } 73 return 0; 74 }
标签:
原文地址:http://www.cnblogs.com/wolf940509/p/5690562.html