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

  1. CodeForces #363 div2 Vacations DP

    题目链接:C. Vacations 题意:现在有n天的假期,对于第i天有四种情况: 0  gym没开,contest没开 1  gym没开,contest开了 2 gym开了,contest没开 3 ...

  2. Codeforces #180 div2 C Parity Game

    // Codeforces #180 div2 C Parity Game // // 这个问题的意思被摄物体没有解释 // // 这个主题是如此的狠一点(对我来说,),不多说了这 // // 解决问 ...

  3. Codeforces #541 (Div2) - E. String Multiplication(动态规划)

    Problem   Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...

  4. Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)

    Problem   Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...

  5. Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)

    Problem   Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...

  6. Codeforces #548 (Div2) - D.Steps to One(概率dp+数论)

    Problem   Codeforces #548 (Div2) - D.Steps to One Time Limit: 2000 mSec Problem Description Input Th ...

  7. 【Codeforces #312 div2 A】Lala Land and Apple Trees

    # [Codeforces #312 div2 A]Lala Land and Apple Trees 首先,此题的大意是在一条坐标轴上,有\(n\)个点,每个点的权值为\(a_{i}\),第一次从原 ...

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

  9. Codeforces #263 div2 解题报告

    比赛链接:http://codeforces.com/contest/462 这次比赛的时候,刚刚注冊的时候非常想好好的做一下,可是网上喝了个小酒之后.也就迷迷糊糊地看了题目,做了几题.一觉醒来发现r ...

随机推荐

  1. 【转】curl 查看一个web站点的响应时间(rt)

    原文: http://blog.csdn.net/caoshuming_500/article/details/14044697 1. curl 查看web站点rt curl -o /dev/null ...

  2. linux 文件系统操作()

    1. 用Xshell 客户端连上远程主机. 2.ll 或 ls 查看当前目录下的文件或目录, cd / 切换到根目录, cd **切换到某个目录(或者叫进入某个文件夹) 3.文件的压缩命令:zip - ...

  3. apicloud教程2 (转载)

    本帖最后由 中山赢友网络科技有限公司 于 2015-10-17 15:38 编辑 继<APICloud之小白图解教程系列(一):认识APICloud>之后的第二篇教程. 本篇教程有以下知识 ...

  4. js操作select和option

    1.动态创建select function createSelect(){ var mySelect = document.createElement_x("select"); m ...

  5. android 中ImageButton按下改变背景图片的效果

    最近在做一个app的登陆界面,才发现原来认为很简单的UI效果,其实背后却蕴含的知识很多,积累一个算一个吧. 实现方法有两种:一种是添加代码,一种是配置xml文件. 方法一:代码添加 ImageButt ...

  6. java int和Integer的区别

    今天偶然和同学讨论到int和Integer的区别是,发现自己对这个问题了解的并不是很清楚,而且有些概念还是错的,所以在这对int和Integer的区别做一个总结. int与integer的区别从大的方 ...

  7. jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support jQuery 从 1.9 版开始,移除了 $.browser ...

  8. java验证控制的方法

    TestNullOrEmpty.java public class TestNullOrEmpty { public static void main(String[] args) {         ...

  9. JSP文件上传--Smartupload组件

    把smartupload.jar copy到D:\apache-tomcat-7.0.57\lib下. 创建htm上传文件:smartupload_demo01.htm 由于是上传文件,需要对表单进行 ...

  10. psy & obv

    PSY和OBV 1,PSY心理线是投资者对股市涨跌产生心理波动的情绪指标.相反,当PSY曲线向下跌破PSYMA曲线后,为卖出时机..当PSY曲线向上突破PSYMA曲线后,开始向下回调至PSYMA曲线, ...