Codeforces Round #249 (Div. 2)
A。水题。
#include <cstdio> #include <iostream> #include <cstdlib> #include <cstring> #include <string> #include<algorithm> using namespace std; ]; int main() { int n,m; cin>>n>>m; ; i<=n; ++i) cin>>a[i]; ; ; ; i<=n; ++i) { if(p<a[i]) { p=m; ans++; } p-=a[i]; } cout<<ans<<endl; ; }
B。用字符串读入数字。对于这个数字,从左往右看,寻找交换k次之内可得的最大数字,并交换到最左边。k再减去交换步数。如此直到k为0或者该数字达它可取的最大值。
#include <cstdio> #include <iostream> #include <cstdlib> #include <cstring> #include <string> #include<algorithm> using namespace std; string num; int k; int main() { cin>>num>>k; ) cout<<num<<endl; else { string t=num; sort(t.begin(),t.end(),greater<int>()); ; int len=num.size(); while(k) { if(num==t) break; int maxp=st; ; i<min(st+k+,len); ++i) if(num[i]>num[maxp]) maxp=i; for(int i=maxp; i>st; --i) { swap(num[i],num[i-]); k--; } st++; } cout<<num<<endl; } ; }
C。根据计算出的数字对,画一个图。
首先计算出所有的数字对,由于有负数,为了方便可以用map<int,int>来存图。取得点可能的上下左右边界值,再遍历该空间,画图即可。
#include <iostream> #include <cstdlib> #include <cstring> #include <string> #include<algorithm> #include<map> using namespace std; typedef pair<int,int> Pair; map<Pair,int > vis; ]; int main() { int n; cin>>n; ; i<=n; ++i) cin>>a[i]; ,left=,down=,right=; ,y=; vis[Pair(x,y)]=; ; i<=n; ++i) { ; j<=a[i]; ++j) { x++; ) y++; else y--; ) vis[Pair(x,y)]=; else vis[Pair(x,y+)]=-; } up=max(up,y); down=min(down,y); left=min(left,x); right=max(right,x); } for(int i=up; i>down; --i) { ; j<=right; ++j) { int &u=vis[Pair(j,i)]; ) cout<<"/"; ) cout<<"\\"; else cout<<" "; } cout<<endl; } ; }
D。预处理+统计。
统计三角形个数。要求选定的三角形的边上不含有黑点。
明显这样图中的三角形只能是等腰直角三角形。我们可以预处理出两条对角线上的白点个数。然后枚举一个点,再递增边长,在保证两条等边不含黑点的前提下,通过判断第三条边上的白点个数来判断第三条边上是否含有黑点。
这样的三角形一共有八种。第一类是斜边在对角线上的三角形,可以枚举直角点,再递增边,判断斜边。第二类是斜边在行或列上的三角形,这样可以枚举斜边中点,沿中点递增边,然后判断两条直角边。
#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> using namespace std; ][]; ][]; ][],UR[][]; int main() { int n,m; scanf("%d%d",&n,&m); ; i<=n; ++i) { scanf(); ; j<=m; ++j) mp[i][j]=(grid[i][j]==:; } ; i<=n; ++i) ; j<=m; ++j) UL[i][j]=UL[i-][j-]+mp[i][j]; ; i<=n; ++i) ; --j) UR[i][j]=UR[i-][j+]+mp[i][j]; ; ; i<=n; ++i) ; j<=m; ++j) if(mp[i][j]) { ; mp[i-d][j]&&mp[i][j-d]; ++d) //左上 ][j+]==d+) ans++; ; mp[i+d][j]&&mp[i][j+d]; ++d)//右下 ][j+d+]==d+) ans++; ; mp[i-d][j]&&mp[i][j+d]; ++d)//右上 ][j-]==d+) ans++; ; mp[i+d][j]&&mp[i][j-d]; ++d)//左下 ][j-d-]==d+) ans++; ; mp[i-d][j]&&mp[i+d][j]; ++d) //左 ][j+]==d+&&UL[i+d][j]-UL[i-][j-d-]==d+) ans++; ; mp[i+d][j]&&mp[i-d][j]; ++d)//右 ][j-]==d+&&UR[i+d][j]-UR[i-][j+d+]==d+) ans++; ; mp[i][j-d]&&mp[i][j+d]; ++d) //上 ][j+]==d+&&UL[i][j+d]-UL[i-d-][j-]==d+) ans++; ; mp[i][j+d]&&mp[i][j-d]; ++d)//下 ][j+d+]==d+&&UL[i+d][j]-UL[i-][j-d-]==d+) ans++; } printf("%d\n",ans); ; }
E。找规律+构造。
答案大致有这么几种情况:
第一类:
1212
3434
1212
3434
或者
1232
3414
1232
1414等等
这类的特点是以左上角的四个格为单元,不断在每列上重复得到。而在每行上,可分为第一、二行交不交换几种情况。
第二类:
1212
3434
2121
3434
或者
1212
3434
2121
4343等等
这类的特点是以左上角的四个格为单元,不断在每行上重复得到。而在每列上,可分为第一、二列交不交换几种情况。
我们需要找出所有情况判断是否和给出的矩阵匹配即可。
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <vector> using namespace std; ][]; int n,m; ][]; bool judge(int x,int y) { '!=arr[x][y]) return false; return true; } void output() { ; i<=n; ++i) { ; j<=m; ++j) printf("%d",arr[i][j]); printf("\n"); } } bool check1() { ; j<=; ++j) ; i<=n; ++i) { arr[i][j]=arr[i-][j]; if(!judge(i,j)) return false; } ; j<=m; ++j) { bool ok=true; arr[][j]=arr[][j-]; arr[][j]=arr[][j-]; ,j)||!judge(,j)) ok=false; ; i<=n&&ok; ++i) { arr[i][j]=arr[i-][j]; if(!judge(i,j)) ok=false; } if(ok) continue; ok=true; arr[][j]=arr[][j-]; arr[][j]=arr[][j-]; ,j)||!judge(,j)) ok=false; ; i<=n&&ok; ++i) { arr[i][j]=arr[i-][j]; if(!judge(i,j)) ok=false; } if(!ok) return false; } return true; } bool check2() { ; i<=; ++i) ; j<=m; ++j) { arr[i][j]=arr[i][j-]; if(!judge(i,j)) return false; } ; i<=n; ++i) { bool ok=true; arr[i][]=arr[i-][]; arr[i][]=arr[i-][]; )||!judge(i,)) ok=false; ; j<=m&&ok; ++j) { arr[i][j]=arr[i][j-]; if(!judge(i,j)) ok=false; } if(ok) continue; arr[i][]=arr[i-][]; arr[i][]=arr[i-][]; ok=true; )||!judge(i,)) ok=false; ; j<=m&&ok; ++j) { arr[i][j]=arr[i][j-]; if(!judge(i,j)) ok=false; } if(!ok) return false; } return true; } int main() { scanf("%d%d",&n,&m); ; i<=n; ++i) scanf(); ]= {,,,}; do { arr[][]=p[]; arr[][]=p[]; arr[][]=p[]; arr[][]=p[]; bool ok=true; ; i<=&&ok; ++i) ; j<=&&ok; ++j) if(!judge(i,j))ok=false; if(!ok) continue; if(check1()||check2()) { output(); ; } } )); puts("); ; }
Codeforces Round #249 (Div. 2)的更多相关文章
- 模拟 Codeforces Round #249 (Div. 2) C. Cardiogram
题目地址:http://codeforces.com/contest/435/problem/C /* 题意:给一组公式,一组数据,计算得到一系列的坐标点,画出折线图:) 模拟题:蛮恶心的,不过也简单 ...
- Codeforces Round #249 (Div. 2) C题,模拟画图 ----未解决!
http://codeforces.com/contest/435/problem/C
- Codeforces Round #249 (Div. 2)B(贪心法)
B. Pasha Maximizes time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- Codeforces Round #249 (Div. 2) A题
链接:http://codeforces.com/contest/435/problem/A A. Queue on Bus Stop time limit per test 1 second m ...
- Codeforces Round #249 (Div. 2) D. Special Grid 枚举
题目链接: http://codeforces.com/contest/435/problem/D D. Special Grid time limit per test:4 secondsmemor ...
- Codeforces Round #249 (Div. 2) 总结
D.E还是很难的.....C不想多说什么... A:提意:给出每一组人的个数,以及一次车载容量,求出最少需要多少次才能载走所有的人. water: http://codeforces.com/cont ...
- Codeforces Round #249 (Div. 2) (模拟)
C. Cardiogram time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Codeforces Round #249 (Div. 2) C. Cardiogram
C. Cardiogram time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Codeforces Round #249 (Div. 2) A. Black Square
水题 #include <iostream> #include <vector> #include <algorithm> using namespace std; ...
- Codeforces Round #249 (Div. 2) B. Pasha Maximizes
看到题目的时候,以为类似插入排序,比较第i个元素和第i-1个元素, 如果第i个元素比第i-1个元素小,则不交换 如果第i个元素比第i-1个元素大,则交换第i个元素和第i-1个元素 继续比较第i-1个元 ...
随机推荐
- 【转】 Android自定义捕获Application全局异常
大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了 ...
- 三种语言(c++、as、lua)中函数的差异性
对于不同的语言, 尤其是静态语言和动态语言, 对于函数的定义(即如何看待一个函数)和处理截然不同.具体来说可以分为两类: 1.将函数视为第一类型值, 即函数和其他的对象一样, 都是语言中一个普通的对象 ...
- linux笔记:linux常用命令-文件处理命令
文件处理命令:touch(创建空文件) 文件处理命令:cat(显示文件内容) 文件处理命令:more(分页显示文件内容) 文件处理命令:head(显示文件前面几行) 文件处理命令:tail(显示文件后 ...
- css读书笔记3:定位元素
定位元素要掌握css技术,核心就是要掌握元素定位. 一般把下面这条规则作为所有css样式表的第一条,初始化所有元素的内边距和外边距都为0: * {padding:0;margin:0;} 盒模型浏览器 ...
- easyui中对于dialog页面传值的接收
dialog的功能是将B页面嵌入至A页面,这样,A页面作为B页面的父容器,所有的元素均可以被B页面访问 那么问题来了:我怎么获取B页面的链接参数呢? 其实很简单,只要找到B页面的存放容器即可: 代码如 ...
- Laravel 实现定时任务
运行命令schedule run 时laravel会去App\console\kernel.php文件中查找schedule方法,有没有要执行的定时命令 实现流程:首先可以自定义命令并注册命令(参考上 ...
- [Hadoop 周边] Hadoop技术生态圈
Hadoop版本演进 当前Hadoop有两大版本:Hadoop 1.0和Hadoop 2.0. Hadoop1.0被称为第一代Hadoop,由分布式文件系统HDFS和分布式计算框架MapReduce组 ...
- vs版本与.net framework 版本对应
vs2002 .net framework 1.0 vs2003 版本号:7.x .net framework 1.1 window server 2003 vs2005 版本号:8.x . ...
- ios基础篇(三)——UIButton的详细介绍
按钮UIButton是ios开发中最常见的控件之一,下面来介绍UIButton的详细内容: 一.UIButton的定义 UIButton *button=[[UIButton buttonWithTy ...
- noip知识点总结之--线性筛法及其拓展
一.线性筛法 众所周知...线性筛就是在O(n)的时间里找出所有素数的方法 code: void get_prime(int N){ int i, j, k; memset(Flag, ); ; i ...