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. Linux 配置tomcat遇见的若干问题

    1.提示catalina.sh缺失 原因:未对bin目录下的.sh文件授权 执行:chmod +x bin/*.sh即可 2.正常启动Tomcat 但是外界无法访问 Linux防火墙原因,进入到 et ...

  2. 【中国剩余定理】 poj 1006

    生理周期  简单模拟 对于超出23 * 28 * 33(21252)时进行求余运算即可. #include<stdio.h> int main() { //freopen("in ...

  3. UIGestureRecognizer 手势浅析

    目录[-] iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用 一.引言 二.手势的抽象类——UIGestureRecognizer 1.统一的初始化方法 2.手势状态 ...

  4. android之相机开发

     http://blog.csdn.net/jason0539/article/details/10125017 android之相机开发 分类: android 基础知识2013-08-20 22: ...

  5. 用for、while、do-while循环输出10句“好好学习,天天向上!”

    #include "stdio.h" void main() { int time; ;time<=;time++) printf("%d.好好学习,天天向上!\n ...

  6. 快学Scala-第八章 继承

    知识点: 1.扩展类 extends关键字,在定义中给出子类需要而超类没有的字段和方法,或者重写超类的方法. 2.重写方法 在Scala中重写一个非抽象方法必须 override 修饰符 public ...

  7. ListView的淡入淡出和Activity的淡入淡出补间动画效果Animation

    //=========主页面======================= package com.bw.lianxi7; import android.os.Bundle;import androi ...

  8. 转:如何让LoadRunner实现多个场景运行?

    场景分析: 有3个不同的场景,分别为搜索,下载,上传,其中3个场景执行顺序为按照搜索->下载->上传流程操作:哪么如何让Loadrunner中如何实现多个场景运行: 方法1:利用Loadr ...

  9. JavaScript返回上一页并自动刷新

    返回并刷新 <script>alert("恭喜您,操作成功!"); window.location.href=document.referrer; </scrip ...

  10. JSP内置对象--application对象(getRealPath(),getAttributeNames(),getContextPath())

    application对象是javax.servlet.ServletContext接口的实例化对象.是整个servlet的上下文,代表了整个web容器的操作. 常用方法: 1.java.lang.S ...