Codeforces Round #472 A-D
A题:
题意:就是给你一个长度为n的字符串,有三种颜色,其中有一些‘?’的字符代表未着色,你需要找到至少有两种方法染色,同时满足相邻两个字符间不能相同;
思路:有两种染色方法的前提:首先给定的字符串中不能出现相邻相同的字符;只要满足这三种条件都可以:‘?’出现在首或尾,‘?’出现在相同字符之间,'?'连续出现两次以上;
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
string s;
cin>>n>>s;int cnt=,flag=;
for(int i=;i<n;i++)
{
if(s[i]=='?')
{
if(i==||i==n-)cnt+=;
else if(s[i-]==s[i+])cnt+=;
else if(s[i-]=='?'||s[i+]=='?')cnt+=;
}
else if(i<n-&s[i]==s[i+])flag=;
}
if(flag||cnt<)cout<<"No"<<endl;
else cout<<"Yes"<<endl;
return ;
}
B题
题意:给定一种操作,即对于某非空的正整数集合的集合R,C,对于R_i和C_i,填充网格中R_i行与C_i列相交点为黑色,且R和C中任意两集合互斥。对于某网格,如能从空白网格经这样的操作变成该网格则输出“Yes”,否则输出“No”。
思路:暴力就ok了。。
#include<iostream>
#include<cstring>
using namespace std;
int n,m;
string s[];
bool check(int x,int y)
{
for(int i=;i<m;i++)
{
if(s[x][i]!=s[y][i])return ;
}
return ;
}
int main()
{
cin>>n>>m;
for(int i=;i<n;i++)cin>>s[i];
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
for(int c=i+;c<n;c++)
{
if(s[i][j]==s[c][j]&&s[i][j]=='#')
{
if(!check(i,c))
{
cout<<"No"<<endl;
return ;
}
}
} }
}
cout<<"Yes"<<endl;
return ;
}
C题
题意:给定一个n长的数组,找到3个数,其下标分别为i,j,k,其中i<j<k,满足(a[k]-a[j])/(a[k]-a[i])最大,同时a[k]与a[i]的差值不能超过给定的U;
思路:排序后枚举i,二分查找a[k]的最大值,要满足a[k]-a[j]最大,即j最小,即j=i+1;不断更新ans即可,但要注意精度问题(因为这个wa了几次orz
#include<iostream>
#include<algorithm>
#include<cstdio>
#define inf 0x3f3f3f3f
using namespace std;
double a[];
int main()
{
int n,d;
cin>>n>>d;
double ans=-;
for(int i=;i<n;i++)cin>>a[i];
sort(a,a+n);
for(int i=;i<n;i++)
{
int t=lower_bound(a,a+n,a[i]+d)-a;
if(t>=n)t=n-;
while(a[t]>a[i]+d&&t>i+)t--;
if(a[t]-a[i]<=d&&t>i+&&t<n)ans=max(ans,1.0*(a[t]-a[i+])/(a[t]-a[i]));
}
printf("%.11llf\n",ans);
return ;
}
D题
题意:一个人每天对河流水位进行标记,给定n天严格大于河流水位的标记数,求每天在当天河流水位下的标记数的总和;
思路:由于每天的水位下的标记数=总标记数-a[i]-1,要使得每天的标记数最小,我们就需要使得到当天的总标记数最小;只要a[i]+1<=前一天的总标记数,那么当天的总标记数就可以不用增加;否则,当天的标记数就要增加,因为每天的标记数最多+1,所以如果a[i]+1>前一天的总标记数+1,当天的总标记数=a[i]+1,但是前一天的标记数也需要更新,所以弄一个循环就可以解决;
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=1e5+;
LL a[maxn],cnt[maxn];
int main()
{
int n;
cin>>n;
for(int i=;i<n;i++)cin>>a[i];
cnt[]=;
LL ans=;
for(int i=;i<n;i++)
{
if(a[i]+>cnt[i-])
{
if(a[i]>cnt[i-])cnt[i]=a[i]+;
else cnt[i]=cnt[i-]+;
}
else cnt[i]=cnt[i-];
}
for(int i=n-;i>=;i--)if(cnt[i+]-cnt[i]>)cnt[i]=cnt[i+]-;
for(int i=;i<n;i++)ans+=cnt[i]-a[i]-;
cout<<ans<<endl;
return ;
}
Codeforces Round #472 A-D的更多相关文章
- codeforces round 472(DIV2)D Riverside Curio题解(思维题)
题目传送门:http://codeforces.com/contest/957/problem/D 题意大致是这样的:有一个水池,每天都有一个水位(一个整数).每天都会在这一天的水位上划线(如果这个水 ...
- Codeforces Round #472 Div. 1
A:某个格子被染黑说明该行和该列同时被选中,使用并查集合并,最后看每个集合中是否有未被染黑的格子即可. #include<iostream> #include<cstdio> ...
- 【推导】【贪心】Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2) D. Riverside Curio
题意:海平面每天高度会变化,一个人会在每天海平面的位置刻下一道痕迹(如果当前位置没有已经刻划过的痕迹),并且记录下当天比海平面高的痕迹有多少条,记为a[i].让你最小化每天比海平面低的痕迹条数之和. ...
- 【推导】Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2) B. Mystical Mosaic
题意:给你一个棋盘的最终局面. 你的一次操作可以选择一些行和列,将它们的交叉点染黑,不能重复选择某行或者某列.问你是否能经过数次操作之后,达到目标局面. 就枚举所有黑点,如果该点行列都没被标记,就给它 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
随机推荐
- 如何处理HTML标签属性
在jQuery里我们可以通过.attr()的方法来实现对HTML标签属性(tag attribute)处理. 1. 获取标签属性的值 (演示) 语法:$('选定目标').attr('属性名') 例子如 ...
- Java使用Zxing生成、解析二维码工具类
Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法. 1.二维码的生成 (1).将Zxing-core.jar 包加入到classpath下. (2). ...
- @Valid的坑
@Valid 只能用来验证 @RequestBody 标注的参数,并且要写在 @RequestBody 之前
- (转载)office 2003 gaozhi.msi 缺失提示问题修复
某些GHOST版win7,自带office 2003,每次启动word,它都会提示"稿纸没安装"云云,找不到那个文件.可是我搜遍了硬盘,确实没有那个文件.每次都要点取消,这个提示才 ...
- sublime相关小技巧
1.快速建立一个新文件:Ctrl+n 2.修改多个相同符号:Ctrl+D 3.建立语言后缀的文件保存,例如我想创建PHP的语言脚本,先按Ctrl+Shift+p,打开Command Palette,输 ...
- UOJ#126【NOI2013】快餐店
[NOI2013]快餐店 链接:http://uoj.ac/problem/126 YY了一个线段树+类旋转卡壳的算法.骗了55分.还比不上$O(n^2)$暴力T^T 题目实际上是要找一条链的两个端点 ...
- linux 命令——23 目录结构
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...
- Python开发第四篇
文件操作 一.文件基本操作 打开文件方法:open f = open("test",encoding="") r:只读模式(只能读取文件,不能做写操作,文件不存 ...
- 打包ios软件并发布到应用商店
真心感慨程序员是一个神奇的动物. 昨天接到任务,将项目打包并发布到apple商店.于是乎... 利用Hbuilder打包 需要的3个文件: AppId,描述文件profile,以及私钥证书 必须条件: ...
- JS中的异常exception
js提供了一套异常处理机制.异常是干扰程序的正常流程的不寻常事故,当发生这样的事故时,你的程序应该抛出一个异常 try_it() { try { console.log(add("1&quo ...