Codeforces Round #363 (Div. 2) A-C
阿新 • • 發佈:2017-08-19
ani ++ string 表示 math ems 所有 output name
A. Launch of Collider
找最近的R和L之間的距離
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int, int> PII; using namespace std; const int maxn = 200000 + 5; char s[maxn]; int a[maxn]; int main() { //FIN int n; while(~scanf("%d", &n)) { scanf("%s", s + 1); int ans = INF; for(int i = 1; i <= n; i++) scanf("%d", &a[i]); int flag = 0; for(int i = 1; i <= n; i++) { if(flag != 0) { if(s[i] == ‘R‘) flag = i; else if(s[i] == ‘L‘) ans = min(ans, a[i] - a[flag]); } else if(s[i] == ‘R‘) flag = i; else continue; } if(ans == INF) printf("-1\n"); else printf("%d\n", ans/2); } return 0; }
B. One Bomb
*是墻問可不可以用一個炸彈把所有的墻炸掉
炸彈可以炸當前坐標上x,y軸上的所有點 (就是一個十字
直接在讀取數據時維護一個前綴然後再掃一遍判斷就可以了
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int, int> PII; using namespace std; const int maxn = 1000 + 5; int q1[maxn]; int q2[maxn]; char mp[maxn][maxn]; int main() { //FIN int n, m; while(~scanf("%d%d", &n, &m)) { int cnt = 0; memset(q1, 0, sizeof(q1)); memset(q2, 0, sizeof(q2)); for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { cin >> mp[i][j]; if(mp[i][j] == ‘*‘) { cnt++; q1[i]++; q2[j]++; } } } int flag = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int tmp = cnt; if(mp[i][j] == ‘*‘) tmp++; if(q1[i] + q2[j] == tmp) { printf("YES\n"); printf("%d %d\n", i+1, j+1); flag = 1; break; } } if(flag) break; } if(flag == 0) printf("NO\n"); } return 0; }
C. Vacations
1 2 代表兩種活動 3表示兩種活動都可以進行 0是休息 不可以連續兩天進行同一個活動,問最少休息的天數是多少, 貪心
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int, int> PII; using namespace std; const int maxn = 100 + 5; int a[maxn]; int main() { //FIN int n; while(~scanf("%d", &n)) { for(int i = 1; i <= n; i++) scanf("%d", &a[i]); int flag = -1; int ans = 0; for(int i = 1; i <= n; i++) { if(a[i] == 0) ans++, flag = -1; else if(a[i] == 1) { if(flag != 1) flag = 1; else flag = -1, ans++; } else if(a[i] == 2) { if(flag != 2) flag = 2; else flag = -1, ans++; } else { if(flag == 1) flag = 2; else if(flag == 2) flag = 1; //else if(a[i+1] == 1) flag = 2; //else flag = 1; } } printf("%d\n", ans); } return 0; }
Codeforces Round #363 (Div. 2) A-C