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的更多相关文章

  1. codeforces round 472(DIV2)D Riverside Curio题解(思维题)

    题目传送门:http://codeforces.com/contest/957/problem/D 题意大致是这样的:有一个水池,每天都有一个水位(一个整数).每天都会在这一天的水位上划线(如果这个水 ...

  2. Codeforces Round #472 Div. 1

    A:某个格子被染黑说明该行和该列同时被选中,使用并查集合并,最后看每个集合中是否有未被染黑的格子即可. #include<iostream> #include<cstdio> ...

  3. 【推导】【贪心】Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2) D. Riverside Curio

    题意:海平面每天高度会变化,一个人会在每天海平面的位置刻下一道痕迹(如果当前位置没有已经刻划过的痕迹),并且记录下当天比海平面高的痕迹有多少条,记为a[i].让你最小化每天比海平面低的痕迹条数之和. ...

  4. 【推导】Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2) B. Mystical Mosaic

    题意:给你一个棋盘的最终局面. 你的一次操作可以选择一些行和列,将它们的交叉点染黑,不能重复选择某行或者某列.问你是否能经过数次操作之后,达到目标局面. 就枚举所有黑点,如果该点行列都没被标记,就给它 ...

  5. 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 ...

  6. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  7. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  8. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  9. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

随机推荐

  1. SQLServer 索引的使用情况

    —在优化查询SQL语句,查看索引使用情况SQL语句: select db_name(database_id) as N'数据库名称', object_name(a.object_id) as N'表名 ...

  2. webpack.config.js====配置babel

    参考:https://www.jianshu.com/p/9808f550c6a91. 安装依赖babel-loader: 负责 es6 语法转化babel-preset-env: 包含 es6.7 ...

  3. [Freemarker] Getting Start

    Freemarker是一个模板引擎,在.NET中有类似的T4模板,FreeMarker对ASP.NET MVC也很友好,链接地址,引用官方的一幅图 模板+数据=视图 Following are the ...

  4. IO模型与soketserver实现并发

    一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非 ...

  5. Web前端开发的学习过程

    2018年 5月27日 开始在MDN上学习HTML/CSS/JavaScript.——6月18日 基本学完MDN的“学习Web开发”的HTML/CSS/JavaScript部分. 6月9日 开始在IF ...

  6. Vue2.0搭建脚手架(vue-cli)

    一.安装node.js 进入官网下载node.js 二.安装 cnpm 1.说明:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理 ...

  7. echarts的title和legend重合解决(各种小细节)

    一:关于title与legend重叠 1.重合样子 2.解决办法: legend:{ show: true, top:"6%",//与上方的距离 可百分比% 可像素px }, 3. ...

  8. 签证-L1/L2

    http://blog.sina.com.cn/s/blog_7664b7f70102uweb.html 14年4月我接到公司通知,要从MICROSTRATEGY中国研发中心内部transfer到美国 ...

  9. HDU 3697 Selecting courses 选课(贪心)

    题意: 一个学生要选课,给出一系列课程的可选时间(按分钟计),在同一时刻只能选一门课程(精确的),每隔5分钟才能选一次课,也就是说,从你第一次开始选课起,每过5分钟,要么选课,要么不选,不能隔6分钟再 ...

  10. C++ vector常用法

    在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<in ...