Codeforces Round #327

来源:互联网 发布:淘宝买家贷款5万怎么贷 编辑:程序博客网 时间:2024/05/01 15:51

div. 2

【A. Wizards' Duel】

#include <bits/stdc++.h>using namespace std;int main(){int l,p,q;scanf("%d%d%d",&l, &p, &q);double a = l*p*1.0/(p+q);printf("%.4lf\n", a);return 0;} 

【B. Rebranding】

#include <bits/stdc++.h>using namespace std;vector<int>v[30];char s[200005];char s2[200005];int p[30];int main(){int n, m;scanf("%d%d", &n, &m);scanf("%s",s);for(int i = 0; i < n; i++){v[s[i]-'a'].push_back(i);}char a[5], b[5];for(int i = 0; i < 26; i++) p[i] = i;for(int i = 0; i < m; i++){scanf("%s%s", a, b);int ai = a[0] - 'a';int bi = b[0] - 'a';int c = p[ai];p[ai] = p[bi];p[bi] = c;}vector<int>:: iterator it;for(int i = 0; i < 26; i++){if(p[i] == -1) continue;for(it = v[p[i]].begin(); it != v[p[i]].end(); ++it){s2[*it] = i + 'a';}}printf("%s\n", s2);return 0;}

【C. Median Smoothing】

#include <bits/stdc++.h>using namespace std;#define inf 500005int a[inf], b[inf];int main(){int n;scanf("%d", &n);for(int i = 0; i < n; i++){scanf("%d", &a[i]);}int ans=0;b[0] = a[0];for(int i = 1; i < n; ){if(a[i] == a[i-1]){b[i] = a[i];i++;}else{int l = i-1, num = 2, j;for(j = i + 1; j < n; j++){if(a[j] == a[j-1]) break;num++;} i = j;for(j = l; j < l+num/2; j++) b[j] = a[l];for(j = l+num/2; j < l+num; j++) b[j] = a[i-1];if(num % 2 == 0) num--;if(num > 2) ans = max(ans,num/2);}}printf("%d\n",ans);for(int i = 0; i < n; i++){if(i<n-1) printf("%d ",b[i]);else printf("%d\n", b[i]);}return 0;}

【D. Chip 'n Dale Rescue Rangers】

这个题目不懂要干嘛,哪位看懂的麻烦给我留个言啊


【E. Three States】

题意

要使得1   2   3这三个连通块联通,最少需要几步

’.‘表示可以通过

‘#’表示不能通过

思路

分别求出每个点到1  2  3的最小距离

#include <bits/stdc++.h>using namespace std;#define inf 10000000typedef pair<int, int>pii;char s[1005][1005];int f[4][2]={0,-1,-1,0,0,1,1,0};int si[3][1005][1005];int n, m;bool is_ok(int x, int y){if(x < 0 || x >= n || y < 0 || y >= m || s[x][y] == '#') return false;return true;}void bfs(int dis[1005][1005], char c){queue<pii>q;pii b,e;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(s[i][j] == c) {dis[i][j]=0;q.push(make_pair(i,j));}else dis[i][j] = inf;}}while(!q.empty()){b = q.front();q.pop();for(int i = 0; i < 4; i++){e.first = b.first + f[i][0];e.second = b.second + f[i][1];int x = e.first, y = e.second;if(!is_ok(x, y)) continue;if(s[x][y] == '.'){if(dis[x][y]>dis[b.first][b.second]+1){dis[x][y] = dis[b.first][b.second] + 1;q.push(e);}}else {if(dis[x][y]>dis[b.first][b.second]){dis[x][y] = dis[b.first][b.second];q.push(e);}}}}}int main(){scanf("%d%d",&n,&m);for(int i = 0; i < n; i++){scanf("%s", s[i]);}for(int i = 0; i < 3; i++){bfs(si[i],(char)i+'1');}int b = inf, c = inf;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(s[i][j] == '2') b = min(b, si[0][i][j]);if(s[i][j] == '3') c = min(c, si[0][i][j]);}}if(b == 0 && c == 0) {printf("0\n");return 0;}int ans = inf;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(s[i][j] == '.'){ans = min(ans, si[0][i][j]+si[1][i][j]+si[2][i][j]-2);}}}if(ans == inf) printf("-1\n");else printf("%d\n", ans);return 0;} 

div. 1

【D. Top Secret Task】


【E. Birthday】


0 0
原创粉丝点击