Codeforces Round #310 (Div. 2)
Problem A:
题目大意:给你一个由0,1组成的字符串,如果有相邻的0和1要消去,问你最后还剩几个字符。
写的时候不想看题意直接看样例,结果我以为是1在前0在后才行,交上去错了。。后来仔细
看了看,哎。以后不能自以为是啊。
#include<bits/stdc++.h>
using namespace std;
const int N=*1e5+;
char s[N];
bool vis[N];
int main()
{
int n;
scanf("%d%s",&n,s);
int cnt=n;
int cnt1=,cnt0=;
for(int i=;i<n;i++)
{
if(s[i]=='') cnt0++;
else cnt1++;
}
printf("%d\n",max(cnt0-cnt1,cnt1-cnt0));
}
Problem B:
题目大意:给你n个一排的齿轮,每个齿轮有编号(0->n-1)的锯齿,问你能不能转动第一个轮子,
使其向上的锯齿依次为,0,1,2,3...n-1。水题,你就把第一个齿轮转到0的次数记录下来,第偶数
个加上,奇数个减去,判断一下。
#include<bits/stdc++.h>
using namespace std;
const int N=;
int a[N];
int main()
{
int n;
cin>>n;
for(int i=;i<n;i++) scanf("%d",&a[i]);
int cnt=n-a[];
//printf("%d\n",cnt);
for(int i=;i<n;i++)
{
if(i%)
{
if((a[i]-cnt+n)%n!=i)
{
puts("No");
return ;
}
}
else
{
if((a[i]+cnt+n)%n!=i)
{
puts("No");
return ;
}
}
}
puts("Yes");
return ;
}
Problem C:
题目大意:给你n个编号1->n的杯子,编号代表了它们的大小,只有大的能套在小的上,现在
给你这些杯子现在的情况,让你把他变成1<-2<-3<-4....<-n这种形式需要操作几次。简单模拟
一下就好了。
#include<bits/stdc++.h>
using namespace std;
int n,k,ans,st;
int pre[];
void Find(int x)
{
if(pre[x]!=x)
{
Find(pre[x]);
ans++;
pre[x]=x;
}
}
void judge(int now,int p)
{
if(now==p+ || p==-)
{
st=now;
judge(pre[now],now);
}
}
int main()
{
cin>>n>>k;
for(int i=;i<=n;i++) pre[i]=i;
for(int i=;i<=k;i++)
{
int m;
scanf("%d",&m);
int p=-;
while(m--)
{
int g;
scanf("%d",&g);
if(p!=-)
{
pre[p]=g;
}
p=g;
}
}
ans=;
st=;
judge(,-);
Find(st);
for(int i=st+;i<=n;i++)
{
Find(i);
pre[i-]=i;
ans++;
}
cout<<ans<<endl;
return ;
}
Problem D:
题目大意:有n个排成以行的小道他们的范围分别是(l[i]->r[i])且l[i+1]>r[i],现在有m个长度为b[i]的桥
两个岛能加上长度为a的桥当且仅当 r[i+1]-l[i]>=a>=l[i+1]-r[i]。问你能不能完成这个工作。
这个题很显然,可以转换成这个问题:有n-1个区间,m个数,每个数最多只能用一次,第i个数只
要能被第j个区间包含,那么这个数就可以放入这个区间内。求出,当所有区间里都恰有一个数时的情况。
我写的时候一直在想固定最大范围和最小范围来贪心,用桥去满足他们,这种方法是不对的。
思路:我们可以将区间按按l排序,桥按长度排序,然后将当前满足 r>=a>=l 的区间都加到优先队列
里面,每次取出r最小的区间,这个桥就搭在这个区间上,为什么呢,因为对于优先队列里面的区间
来说,当前及以后的桥都满足,len[i]>=l 所以可以不用考虑区间的l,这样我们显然就可以贪心地取
r小的区间。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=*1e5+;
struct node
{
ll mx,mn;
int id;
bool operator <(const node&t) const
{
return mx>t.mx;
}
}w[N];
bool cmp(node a,node b)
{
return a.mn<b.mn;
}
struct num
{
ll v;
int id;
bool operator <(const num &t)const
{
return v<t.v;
}
}a[N];
ll ans[N];
int n,m;
int main()
{
cin>>n>>m;
ll pl=-,pr=-;
for(int i=;i<n;i++)
{
ll l,r;
scanf("%I64d%I64d",&l,&r);
if(pl!=-)
{
//printf("%d**\n",i);
w[i].mx=r-pl;
w[i].mn=l-pr;
w[i].id=i;
}
pl=l,pr=r;
}
for(int i=;i<=m;i++)
{
scanf("%I64d",&a[i].v);
a[i].id=i;
}
sort(a+,a++m);
sort(w+,w+n,cmp);
//for(int i=1;i<=m;i++) printf("%I64d ",a[i].v);
//puts("");
//for(int i=1;i<n;i++) printf("[%I64d,%I64d] ",w[i].mn,w[i].mx);
priority_queue<node> Q;
int cnt=;
for(int i=,j=;i<=m;i++)
{
while(w[j].mn<=a[i].v && a[i].v<=w[j].mx && j<n)
{
Q.push(w[j]);
j++;
}
if(Q.empty()) continue;
node now=Q.top();Q.pop();
if(a[i].v>now.mx)
{
puts("No");
return ;
}
ans[now.id]=a[i].id;
cnt++;
}
//printf("%d\n",cnt);
if(cnt<n-)
{
puts("No");
return ;
}
puts("Yes");
for(int i=;i<n;i++) printf("%I64d%c",ans[i],i==n-?'\n' : ' ');
return ;
}
problem E:
题意:
有一块n*n大小的巧克力,n<=1e9。现在进行操作,每次都从反对角线上选择一点,然后往上或往左一直吃,
每当到达巧克力边缘或者下一块已经被吃了,则停止。问你每次操作能吃到几块巧克力。
思维题,感觉挺难想到了,还是我太菜了。。
思路:我们考虑从j列往上吃巧克力,吃掉的个数受什么影响呢,肯定不受<j的列印象,对它有直接影响的就
他右边第一个有操作的点,如果这个点的操作时向左吃,则从j列向上吃只能吃到有操作点的那一行,如果右边
第一个有操作的点是向上吃,则j列吃的和它一样。
#include<bits/stdc++.h>
using namespace std;
map<int,int> u,l;
int n,q;
int main()
{
cin>>n>>q;
while(q--)
{
int x,y;
char s[];
scanf("%d%d%s",&x,&y,s);
map<int,int>::iterator p;
if(s[]=='U')
{
int ans=;
p=u.lower_bound(x);
if(u.count(x))
{
puts("");
continue;
}
if(p==u.end()) ans=y;
else ans=y-(p->second);
printf("%d\n",ans);
l[y]=x;
u[x]=y-ans;
}
else
{
int ans=;
p=l.lower_bound(y);
if(l.count(y))
{
puts("");
continue;
}
if(p==l.end()) ans=x;
else ans=x-(p->second);
printf("%d\n",ans);
u[x]=y;
l[y]=x-ans;
}
}
return ;
}
Codeforces Round #310 (Div. 2)的更多相关文章
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...
- 构造 Codeforces Round #310 (Div. 2) B. Case of Fake Numbers
题目传送门 /* 题意:n个数字转盘,刚开始每个转盘指向一个数字(0~n-1,逆时针排序),然后每一次转动,奇数的+1,偶数的-1,问多少次使第i个数字转盘指向i-1 构造:先求出使第1个指向0要多少 ...
- 找规律/贪心 Codeforces Round #310 (Div. 2) A. Case of the Zeros and Ones
题目传送门 /* 找规律/贪心:ans = n - 01匹配的总数,水 */ #include <cstdio> #include <iostream> #include &l ...
- Codeforces Round #310 (Div. 1) C. Case of Chocolate set
C. Case of Chocolate Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/555/ ...
- Codeforces Round #310 (Div. 2) B. Case of Fake Numbers 水题
B. Case of Fake Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...
- Codeforces Round #310 (Div. 2) A. Case of the Zeros and Ones 水题
A. Case of the Zeros and Ones Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...
- Codeforces Round #310 (Div. 1) B. Case of Fugitive set
B. Case of Fugitive Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/555/p ...
- Codeforces Round #310 (Div. 1) A. Case of Matryoshkas 水题
C. String Manipulation 1.0 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
- Codeforces Round #310 (Div. 2)--B
http://codeforces.com/problemset/problem/556/B 题意:给定n个数字且都小于n,然后每次循环第2k+1个数字+1,第2k个数字减一,k=0,1,2...n/ ...
- Codeforces Round #310 (Div. 2)--A(简单题)
http://codeforces.com/problemset/problem/556/A 题意:给一个01字符串,把所有相邻的0和1去掉,问还剩下几个0和1. 题解:统计所有的0有多少个,1有多少 ...
随机推荐
- ATS 自定义日志格式
字段解释 %<chi> 客户端IP %<caun> The username of the authenticated client. A hyphen (-) means t ...
- Hibernate非主键一对多关联。
Unit表 id,code User表 id,ucode ...@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="ucode" ...
- aop(Aspect Oriented Programming)面向切面编程
AOP,一个oop的后传,面向切面,一个基于代理模式的机制. 举例子把:说原理很难理解, 吃饭:谁都得吃饭,一个老师类,有吃饭的方法.一个学生类,也得有吃饭的方法.是不是都得实现这个方法?构建一个pe ...
- POJ 1200 Crazy Search (哈希)
题目链接 Description Many people like to solve hard puzzles some of which may lead them to madness. One ...
- Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行
1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用 ...
- Android ThreadPool
在Android开发中,如果我们要执行某个耗时任务,一般都会考虑开启一个线程去处理. 一个线程run方法执行完毕后,才算真正结束:但是,这只是结束,并没有被回收:会一直闲置在那里,等待GC去回收.所以 ...
- LaTeX 对齐问题
一.一行文本对齐 \leftline{左对齐} \centerline{居中} \rightline{右对齐} 二.多行文本或段落对齐 左对齐 \begin{flushleft}...\end{flu ...
- Docker镜像命令
①docker images [Options] 用途:列出本地主机上的镜像 Options说明: -a:列出本地所有的镜像(含中间映像层) -q:只显示镜像ID --digests:显示镜像的摘要信 ...
- centos6.7环境之kvm虚拟化quem工具配置及使用详解
环境准备 需要勾选CPU的虚拟化支持,支持cpu虚拟化的CPU列表: intel支持虚拟化技术CPU列表: Intel 6 Cores / 12 Threads CPU Number: Code Na ...
- 转载:为什么选择Nginx(1.2)《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19610.html 为什么选择Nginx?因为它具有以下特点: (1)更快 这表现在两个方面:一方面,在正常情况下,单次请求会得到更快 ...