Codeforces Round #327
2015-10-26 20:28
260 查看
div. 2
【A. Wizards' Duel】
【B. Rebranding】
【C. Median Smoothing】
【D. Chip 'n Dale Rescue Rangers】
这个题目不懂要干嘛,哪位看懂的麻烦给我留个言啊
【E. Three States】
题意
要使得1 2 3这三个连通块联通,最少需要几步
’.‘表示可以通过
‘#’表示不能通过
思路
分别求出每个点到1 2 3的最小距离
div. 1
【D. Top Secret Task】
【E. Birthday】
【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 500005 int 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 10000000 typedef 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】
相关文章推荐
- ural 1283. Dwarf
- 跟着猫哥学Golang[4] - switch
- C++拷贝构造函数语意学 copy constructor(The Semantics of Constructors)
- Linux-CentOS 安装Unoconv
- 制作PHP的RPM包教程
- IOS开发笔记9-数组-C语言笔记
- UESTC OJ1218(DP)
- 一个数的阶乘后面有多少个0
- const int *p, int *const p的区别
- CSS 基础点集锦一:盒子模型、浮动、清除浮动
- CSS 基础点集锦一:盒子模型、浮动、清除浮动
- hdu 2553 N皇后问题(回溯法)
- 消失的模拟器
- C# SQLite数据库 访问封装类
- Sql Server数据库数据导入到SQLite数据库中
- Sql Server数据库数据导入到SQLite数据库中
- C# SQLite数据库 访问封装类
- vs2013 boost库编译小结
- PHP操作MySQL数据库的几种方式
- CentOS下MySQL 5.7.9编译安装