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 ...
随机推荐
- Unable to chmod
不能改变权限 Unable to chmod /system/build.prop.: Read-only file system 解决方式: before chmod: Code: mount -o ...
- spring xsd
http://ljhzzyx.blog.163.com/blog/static/3838031220132239471608/ spring配置文件报找不到xsd文件错误 2013-03-23 10: ...
- mysql免安装版使用方法
1.下载并解压mysql免安装版至自定义目录 2.添加环境变量 变量名:MYSQL_HOME 变量值:D:\Program Files\mysql-5.6.11-winx64 即为mysql的自定义解 ...
- 关于Ajax的type为post提交方式出现请求失效问题
最近碰到这样一个问题,原本一个ajax异步提交数据之前是很好的,很多系统都延用了均未出现任何问题.最近这个版本却出现ajax方式post数据不到后台程序,让我折腾了好几天.起初的ajax是这样写的: ...
- js操作select和option
1.动态创建select function createSelect(){ var mySelect = document.createElement_x("select"); m ...
- POJ1734/Floyd求最小环
Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6647 Accepted: 2538 ...
- Course
Coursera计算机专业课程列表 巴黎中央理工学院人工视觉中的离散推理和学习 教授 Nikos Paragios & Pawan Kumar Jan 10th 2014 8 ...
- Android图片处理神器BitmapFun源码分析
作为一名Android开发人员,相信大家对图片OOM的问题已经耳熟能详了,关于图片缓存和解决OOM的开源项目也是相当的多,被大家熟知的就是Universal_image_loader和Volley了, ...
- 添加以及删除className
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- java应用程序中判断用户输入的一个整数是否在已知数组里。
import java.util.*; class Example2_5 { public static void main(String args[]) { int start=0,end,midd ...