Codeforces Round #356 (Div. 2)
2016-06-15 22:05
501 查看
5/5
懒啊懒啊~~屯了一堆题没补,GG……
最近要期末考试,博客也搁置很久没有更新了,虽然更新也没人看,但是还是要定期写点东西。
水了一场CF,最大的感想是CF红名果然很难,但是坚持打更重要,所以不要以实力不够为借口,每次还是爆一下肝肛一下CF,万一红名了呢?
在这里我决定每次新的一场CF出来之前,都把题目补好,然后迎接新的CF,最近真的没时间刷题orz,这么蒟蒻还不刷题QAQ
题A Bear and Five Cards
题意:只允许移动两个或者三个相同的t,然后问你剩下最小的和是多少?
题解:水题。
代码君
懒啊懒啊~~屯了一堆题没补,GG……
最近要期末考试,博客也搁置很久没有更新了,虽然更新也没人看,但是还是要定期写点东西。
水了一场CF,最大的感想是CF红名果然很难,但是坚持打更重要,所以不要以实力不够为借口,每次还是爆一下肝肛一下CF,万一红名了呢?
在这里我决定每次新的一场CF出来之前,都把题目补好,然后迎接新的CF,最近真的没时间刷题orz,这么蒟蒻还不刷题QAQ
题A Bear and Five Cards
题意:只允许移动两个或者三个相同的t,然后问你剩下最小的和是多少?
题解:水题。
/*zhen hao*/ #include <bits/stdc++.h> using namespace std; const int maxn = 510, dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0}; char maze[maxn][maxn]; int n, k; int id[maxn][maxn], size[maxn * maxn], cur[maxn * maxn]; bool inside(int x, int y) { return x >= 0 && x < n && y >= 0 && y < n; } void dfs(int x, int y, int num) { id[x][y] = num; size[num]++; for (int i = 0; i < 4; i++) { int xx = x + dx[i], yy = y + dy[i]; if (inside(xx, yy) && maze[xx][yy] == '.' && id[xx][yy] == 0) dfs(xx, yy, num); } } void add(int x, int y, int& now, int current) { if (inside(x,y) && maze[x][y] == '.') { int i = id[x][y]; if (cur[i] != current) { cur[i] = current; now += size[i]; } } } int main() { // freopen("case.in", "r", stdin); cin >> n >> k; for (int i = 0; i < n; i++) { scanf("%s", maze[i]); } int cnt = 0; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (maze[i][j] == '.' && id[i][j] == 0) dfs(i, j, ++cnt); int best = 0, current = 0; for (int nowx = 0; nowx + k <= n; nowx++) { for (int x = nowx; x < nowx + k; x++) for (int y = 0; y < k; y++) --size[id[x][y]]; for (int nowy = 0; nowy + k <= n; nowy++) { int now = k * k; current++; for (int x = nowx; x < nowx + k; x++) { add(x, nowy - 1, now, current); add(x, nowy + k, now, current); } for (int y = nowy; y < nowy + k; y++) { add(nowx - 1, y, now, current); add(nowx + k, y, now, current); } best = max(best, now); if (nowy + k != n) { for (int x = nowx; x < nowx + k; x++) { ++size[id[x][nowy]]; --size[id[x][nowy + k]]; } } } for (int x = nowx; x < nowx + k; x++) for (int y = n - k; y < n; y++) ++size[id[x][y]]; } cout << best << endl; }
代码君
相关文章推荐
- Java中的内部类、匿名类的使用
- word编辑目录页码----去掉前后横线的问题
- 软件工程系列-软件开发的需求分析
- leetcode-java-225. Implement Stack using Queues
- iOS10个实用小技巧(总有你不知道的和你会用到的)
- 搭建PXE环境批量部署Redhat6(win方式)
- 作业九 ——报告及总结
- 作业九 ——报告及总结
- Java虚拟机
- Jimoshi_整合三大框架(一)--创建整合maven项目(SSH项目)、简单的测试示例(登录)、加载数据库模拟数据
- python自动化运维学习之psutil模块
- PCB板在调试时出现的问题总结以及设计出现的小Bug
- 用Qt编写的windows平台关机程序(附源代码)
- Flume安装
- mfc 两层树形控件的初始化
- Django学习笔记:为Model添加Action
- 从C到C++
- ASIHTTPRequest的使用——同步或异步请求
- IOs消息推送
- 机器学习之概率论与数理统计基础知识-(1)马尔可夫和贝叶斯