Codeforces#363 Div2
A题:
题意:给定一些数,给定一些往左走和往右走的操作,问是否能够相遇,如果相遇请求出相遇时间
分析:对于相邻两个数,如果大的往左,小的往右就能够相遇,否则不能相遇,在求出所有相遇当中的第一次相遇即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
const int INF=<<;
int a[maxn];
int n;
int main()
{
while(cin>>n)
{
string s;
cin>>s;
for(int i=;i<n;i++)
cin>>a[i];
int flag=;
int k;
int minx=INF;
for(int i=;i<n-;i++)
{
int flag1=;
if(s[i]=='R'&&s[i+]=='L'&&a[i]<a[i+])
{
flag=; flag1=;
}
else if(s[i]=='L'&&s[i+]=='R'&&a[i]>a[i+]){
flag=; flag1=;
}
if(flag1){
int maxt=max(a[i],a[i+]);
int mint=min(a[i],a[i+]);
int t=(maxt-mint)/;
if(t<minx)
minx=t;
}
}
if(flag) {
cout<<minx<<endl;
}else
{
cout<<"-1"<<endl;
}
}
return ;
}
B题:
题意:*代表墙,.代表空地,一个炸弹能够炸掉横竖各一列的墙,问能否通过一枚炸弹,让所有全部变成平地
分析:这是一道Hack点极多的题,我就因为这题被Hack了,Ranting一朝回到解放前。直接模拟即可,但是要注意两种情况,一个是没有一个格子是墙壁的情况,还有一种选择放置炸弹的点不是墙壁的情况
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
int n,m;
int vis[maxn],d[maxn];
int main()
{
while(cin>>n>>m)
{
char s[maxn][maxn];
for(int i=;i<n;i++)
cin>>s[i];
int flag1=;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
if(s[i][j]=='*'){
flag1=; break;
}
}
}
if(!flag1){
cout<<"YES"<<endl;
cout<<""<<" "<<""<<endl;
continue;
}
memset(vis,,sizeof(vis));
memset(d,,sizeof(d));
int flag=;
int cnt=;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++){
if(s[i][j]=='*'){
vis[i]++;
d[j]++;
cnt++;
}
}
}
int h,k;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
if(s[i][j]=='*'){
if(vis[i]+d[j]==cnt+){
h=i; k=j; flag=; break;
}
}else if(s[i][j]=='.'){
if(vis[i]+d[j]==cnt){
h=i;k=j; flag=; break;
}
}
}
if(flag) break;
}
if(flag){
cout<<"YES"<<endl;
cout<<h+<<" "<<k+<<endl;
}else{
cout<<"NO"<<endl;
}
}
return ;
}
C题:
题意:0代表休息,1代表学习,2代表运动,3既可以代表学习又可以代表运动,相邻两天之间做的活不能一样,问最少休息几天
分析:赛场上没有做出来的dp,写错一个地方。dp[i][j]代表前i天,当第i天为j时的最多活动天数,当第i天为0时,必须休息,所以dp[i][0]就为前i-1天的最大值,当第i天为1或者3时,我们考虑若是工作的话,那必须从距离他最近的一个2或者0再+1,同理i为2的话也是距离他最近的一个1或者0再加1,最后减去最大工作天数即可。非常非常好的一个题目,值得回味
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
int dp[maxn][];
int a[maxn];
int n;
int main()
{
while(cin>>n)
{
for(int i=;i<=n;i++)
cin>>a[i];
memset(dp,,sizeof(dp));
int mx=;
for(int i=;i<=n;i++){
dp[i][]=max(dp[i-][],max(dp[i-][],max(dp[i-][],dp[i-][])));
if(a[i]==||a[i]==)
dp[i][]=max(dp[i-][],dp[i-][])+;
if(a[i]==||a[i]==)
dp[i][]=max(dp[i-][],dp[i-][])+;
int cnt=max(dp[i][],max(dp[i][],dp[i][]));
mx=max(mx,cnt);
}
cout<<n-mx<<endl;
}
return ;
}
D题:
题意:给出每个结点父结点的编号,求最小修改多少个数可以使其成为一课完整的树
分析:非常好的一个题目,我们来考虑何时是一棵树。当有环时必然不能构成一棵树,当有孤点时必然不能构成一棵树。那我们要做的就是破环,这个地方就用到了并查集,对于有环存在的两个结点,他们通过并查集查询出来的根结点必定相同,但此时有一个结点还未并入集合,因此只可能是存在环,这一点很重要,基于此,我们对每个环进行破环,孤点也可以看做一个自环。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
int par[maxn],rankl[maxn],a[maxn];
void init(int n)
{
for(int i=;i<=n;i++){
par[i]=i;
rankl[i]=;
}
}
int findl(int x)
{
if(x==par[x])
return x;
else
return par[x]=findl(par[x]);
}
void unite(int x,int y)
{
x=findl(x);
y=findl(y);
if(x==y) return;
if(rankl[x]<rankl[y])
{
par[x]=y;
}else{
par[y]=x;
if(rankl[x]==rankl[y]) rankl[x]++;
}
}
bool same(int x,int y)
{
return findl(x)==findl(y);
}
int n;
int main()
{
while(cin>>n)
{
int root=-;
int cnt=;
init(n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(i==a[i]) root=i;
}
for(int i=;i<=n;i++)
{
int fx=findl(i);
int fy=findl(a[i]);
if(fx==fy&&i!=root)
{
if(root==-)
root=i;
a[i]=root;
cnt++;
}
unite(fx,fy);
}
printf("%d\n",cnt);
for(int i=;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
}
return ;
}
Codeforces#363 Div2的更多相关文章
- CodeForces #363 div2 Vacations DP
题目链接:C. Vacations 题意:现在有n天的假期,对于第i天有四种情况: 0 gym没开,contest没开 1 gym没开,contest开了 2 gym开了,contest没开 3 ...
- Codeforces #180 div2 C Parity Game
// Codeforces #180 div2 C Parity Game // // 这个问题的意思被摄物体没有解释 // // 这个主题是如此的狠一点(对我来说,),不多说了这 // // 解决问 ...
- Codeforces #541 (Div2) - E. String Multiplication(动态规划)
Problem Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...
- Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)
Problem Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
- Codeforces #548 (Div2) - D.Steps to One(概率dp+数论)
Problem Codeforces #548 (Div2) - D.Steps to One Time Limit: 2000 mSec Problem Description Input Th ...
- 【Codeforces #312 div2 A】Lala Land and Apple Trees
# [Codeforces #312 div2 A]Lala Land and Apple Trees 首先,此题的大意是在一条坐标轴上,有\(n\)个点,每个点的权值为\(a_{i}\),第一次从原 ...
- A. Launch of Collider Codeforces Round #363 (Div2)
A. Launch of Collider time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- Codeforces #263 div2 解题报告
比赛链接:http://codeforces.com/contest/462 这次比赛的时候,刚刚注冊的时候非常想好好的做一下,可是网上喝了个小酒之后.也就迷迷糊糊地看了题目,做了几题.一觉醒来发现r ...
随机推荐
- linux sort 用法
sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式: sort [-bcfMnrtk][源文件][-o 输出文件]补充说明:sort可针对文本文件的内容,以行为单位来排序. 参 数: ...
- OpenGL.Vertex Array Object (VAO).
OpenGL抛弃glEnable(),glColor(),glVertex(),glEnable()这一套流程的函数和管线以后,就需要一种新的方法来传递数据到Graphics Card来渲染几何体,我 ...
- js html 交互监听事件学习
事件处理程序(handler): HTML事件处理程序: <input type="button" value="Click Here" onclick= ...
- 转:Selenium-Grid工作方式
Selenium-Grid版本 selenium-grid分为版本1和版本2,其实它的2个版本并不是和selenium的版本1和2相对应发布的[即selenium-grid2的发布比selenium2 ...
- ZOJ 3913 Bob wants to pour water
ZOJ Monthly, October 2015 K题 二分答案+验证 #include<iostream> #include<algorithm> #include< ...
- Windows API 之 CreateThread、WaitForSingleObject(未完)
WaitForSingleObject Waits until the specified object is in the signaled state or the time-out interv ...
- ListView显示多种类型的item
ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似 这是MainActivity:,MainActivity的布局就是一个ListView public class Mai ...
- Android应用程序基础
Android程序使用Java语言编写.Android开发套件把数据.资源文件和Java代码编译到一个.以.apk为后缀名的Android压缩包中.一个单独的apk文件中的所有代码被认为是一个andr ...
- opencv2 矩阵方式 resize图像缩放代码(转载)
http://blog.sina.com.cn/s/blog_74a459380101r0yx.html opencv2 矩阵方式 resize图像缩放代码(转载) (2014-05-16 09:55 ...
- hdu_2546_饭卡(01背包)
题目连接:hdu_2546_饭卡 题意:中文,不解释 题解:先拿5元来买最贵的,最后就是一个01背包,这里也算用到贪心的思想 #include<bits/stdc++.h> #define ...