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 ...
随机推荐
- **ERROR: Ninja build tool not found.
| if which ninja-build ;\| then \| ln -s `which ninja-build` bin/ninja ;\| else \| echo "***ERR ...
- web服务器小记
服务器分web服务器,应用程序服务器以及HTTP服务器,此处只解释web服务器,详情: http://www.cnblogs.com/zhaoyl/archive/2012/10/10/2718575 ...
- OpenCV 基础知识------图像创建、访问、转换
cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ...
- linux视频学习5(top, 网络监控
top命令的详解: 1. top :动态监控进程. 第一行:当前系统时间: up 4days :服务器启动后的持续时间. 5 user 当前服务器上的用户数目 ; load average :负载 ...
- linux视频学习4(crontab和进程)
1 . crontab定时任务: 任务调度: 系统在某个时间执行的特定的命令. 分类: 1.系统工作.2.个别的用户工作. 设置任务调度文件: /etc/crontab 1.crontab -e : ...
- 10款免费Bootstrap后台模板演示及下载
自从有了类似Bootstrap这样强大的前端框架之后,无论我们是做静态页面,还是做网站主题,着实方便很多.即便有很多类似的其他国产.海外的前端框架比较,Bootstrap用户量以及功能文档还是比较大的 ...
- python 基本的序列和映射规则
>>> def checkIndex(key):... if not isinstance(key,(int,long)):raise TypeError... if ...
- socket常见几种异常
第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行newServerSocket(port)(po ...
- ViewHolder最简洁的写法
通用viewHolder工具类: public class ViewHolder { // I added a generic return type to reduce the casting no ...
- SVN分支的创建,合并,与销毁和相关操作
test是分支和主干所在的文件夹,SVNTest是主干,所有的分支都放在branch里面,192.168.1.101是服务器的地址 创建分支: 把服务器中的主干复制出来到自己的分支上: svn cop ...