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 ...
随机推荐
- Java排序算法(三)
Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...
- AngularJs在ng-click函数中如何获取代表当前元素的DOM对象
<!DOCTYPE html> <html> <head> <title></title> <script src="lib ...
- mysql通用分页存储过程遇到的问题
DELIMITER $$ USE `tsb_asksys`$$ DROP PROCEDURE IF EXISTS `P_viewPage`$$ CREATE DEFINER=`root`@`local ...
- NGSL + NAWL 单词表 以及学习网站
https://quizlet.com/44769538/nawl-1-1-50-flash-cards/ NAWL 网站 NAWL 单词表 + NGSL 单词表 http://www.newgen ...
- [Unity3D] 如何识别屏幕边缘
出现的问题 Unity3D中长度单位是米 使用Screen.resolutions获取的屏幕信息单位是像素 也就是说,即使获取了屏幕相关信息及参数,也无法把信息转换成可在editor中使用的信息.当时 ...
- 本地eclipse启动tomcat后无法访问
转自博文:http://blog.csdn.net/wqjsir/article/details/7169838/ 症状: tomcat在eclipse里面能正常启动,而在浏览器中访问http://l ...
- Qt的各种使用技巧
一.基本界面介绍 二.查看帮助的方法 ① 如上图所示,点击右侧帮助菜单查看帮助 ② 双击想要查看的代码,点F1,也会弹出帮助栏 三.修改文本编辑器颜色 长时间使用白底黑字的编辑器经常会使眼睛不舒服,以 ...
- System Center Configuration Manager 2016 域准备篇(Part1)
本系列指南如何从Microsoft安装最新的Configuration Manager基准版本.较新的可用基准版本System Center Configuration Manager(当前分支)版本 ...
- 微信小程序(底部导航的实现)
详情请看官方文档介绍: https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html 在根目录配置文件app.json中配置底部导航: ...
- 几个重要的开源视频会议SIP协议栈
视频会议系统由于需要与不同的终端进行连接,因此我们需要视频会议终端遵循统一的协议,H.323协议是视频会议软件使用最广泛的协议栈,但H.323设计得较为复杂,用户在调用H.323协议过程较多,因此利用 ...