码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces#363 Div2

时间:2016-07-21 09:51:44      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

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

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

 

Codeforces#363 Div2

标签:

原文地址:http://www.cnblogs.com/wolf940509/p/5690562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!