剧毒比赛,至少涨了分对吧。: (

【A】Left-handers, Right-handers and Ambidexters

题意:

有\(l\)个右撇子,\(r\)个左撇子,\(a\)个双手都惯用的人。

要让他们组成两个队伍,一边用左手,一边用右手,这两个队伍人数要相同。

问最大人数。

题解:

随便搞……

#include<bits/stdc++.h>
using namespace std;
int l,r,a;
int main(){
scanf("%d%d%d",&l,&r,&a);
if(l>r) swap(l,r);
if(l+a<=r) {printf("%d",(l+a)*2); return 0;}
printf("%d",(l+a+r)/2*2);
return 0;
}

【B】Intercepted Message

题意:

有两个数组\(x_1,x_2,\cdots,x_n\),\(y_1,x_2,\cdots,y_m\)。

要把这两个数组分成若干个子串(个数相等,从左到右一一对应)。

并且每个对应子串的和相等,问最多子串个数。

题解:

贪心,双指针扫过去。

#include<bits/stdc++.h>
#define F(i,a,b) for(int i=(a);i<=(b);++i)
int n,m,ans;
int a[100001],b[100001];
int main(){
scanf("%d%d",&n,&m);
F(i,1,n) scanf("%d",a+i);
F(i,1,m) scanf("%d",b+i);
int l=1,sum1=0,sum2=0;
F(i,1,n){
sum1+=a[i];
while(sum2+b[l]<=sum1) sum2+=b[l] ,++l;
if(sum2==sum1) ++ans, sum1=sum2=0;
}
printf("%d",ans);
return 0;
}

【C】Zebras

题意:

给定一个01串,把它分成若干个子序列的并,不重复不遗漏。

并且要满足每个子序列都是斑马序列。

斑马序列的定义是,以0开始,01交替出现,并且以0结尾的字符串。

如果可行,输出任意方案,不可行输出-1。

题解:

set暴力上贪一波心。01分开set,能选就选。

#include<bits/stdc++.h>
#define F(i,a,b) for(int i=(a);i<=(b);++i)
#define F2(i,a,b) for(int i=(a);i<(b);++i)
using namespace std;
int n;
int arr[200007],tot,cnt;
char str[200007];
vector<int> ans[200007];
set<int> st1,st2;
set<int>::iterator iter;
int main(){
scanf("%s",str+1);
n=strlen(str+1);
F(i,1,n) if(str[i]=='0') st1.insert(i); else st2.insert(i);
while(!st1.empty()){
++tot;
int lst=*st1.lower_bound(0);
st1.erase(lst);
ans[tot].push_back(lst);
while(1){
int tmp1,tmp2;
iter=st2.lower_bound(lst);
if(iter==st2.end()) break;
tmp1=*iter;
iter=st1.lower_bound(tmp1);
if(iter==st1.end()) break;
tmp2=*iter;
st2.erase(tmp1), st1.erase(tmp2);
ans[tot].push_back(tmp1);
ans[tot].push_back(tmp2);
lst=tmp2;
}
}
if(!st2.empty()){puts("-1"); return 0;}
printf("%d\n",tot);
F(i,1,tot){
printf("%d ",ans[i].size());
F2(j,0,ans[i].size()) printf("%d ",ans[i][j]);
puts("");
}
return 0;
}

【D】A Leapfrog in the Array

题意:略复杂,看原来的题面

题解:

瞎找规律。

当前的len一开始为n,如果位置pos在这一串的"固定点"(一开始为奇数位)上,直接输出。

否则进行一波跳,len大致减半,pos大致减半,固定点的奇偶性随着len的奇偶性改变,答案加上跳过的数。

这么一波分类讨论一下就OK。

#include<bits/stdc++.h>
#define F(i,a,b) for(int i=(a);i<=(b);++i)
typedef long long ll;
ll n; int q;
int main(){
scanf("%lld%d",&n,&q);
F(i,1,q){
ll x, ans=0, len=n;
int k=0;
scanf("%lld",&x);
while(x%2==k){
ans+=k==0?(len+1)/2:len/2;
x=(x+k)/2;
int len2=len;
len=k==0?len/2:(len+1)/2;
k^=(len2&1);
}
printf("%lld\n",ans+(x+(k^1))/2);
}
return 0;
}

【E】Data Center Maintenance

题意:略复杂,看原来的题面

题解:

对于两个数据中心,如果有一个数据保存在这两个数据中心中,并且这两个数据中心的维护时间差1小时,那么如果其中一个时间小的移动了维护时间,另一个必然也要移动。

这是一个连锁反应,我们先把这种关系连成有向图。

那么对于一个圈,要不然全部取要不然全部不取。所以先强连通分量缩一波点。

然后得到一个DAG,那么如果取了一个点,它之后的所有点就都要取了,所以最佳策略是取出度为0的点。

那么就算做完了。

#include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=(b);++i)
#define dF(i,a,b) for(int i=a;i>=(b);--i)
#define eF(h,i,u) for(int i=h[u];i;i=nxt[i])
using namespace std; int n,m,H,Ans;
int Ut[100001]; int h[100001],h2[100001],nxt[500001],to[500001],tot;
inline void ins(int x,int y){nxt[++tot]=h[x];to[tot]=y;h[x]=tot;}
inline void ins2(int x,int y){nxt[++tot]=h2[x];to[tot]=y;h2[x]=tot;} bool vis[100001];
int dfn[100001],idf[100001],siz[100001],SCC[100001],Out[100001],cnt,CCn; int h3[100001];
inline void ins3(int x,int y){nxt[++tot]=h3[x];to[tot]=y;h3[x]=tot;} bool check(int Ut1,int Ut2){return (Ut2-Ut1+H)%H==1;} void init(){
int x,y;
scanf("%d%d%d",&n,&m,&H);
F(i,1,n) scanf("%d",Ut+i);
F(i,1,m){
scanf("%d%d",&x,&y);
if(check(Ut[x],Ut[y])) ins(x,y),ins2(y,x);
if(check(Ut[y],Ut[x])) ins(y,x),ins2(x,y);
}
} void DFS1(int u){
vis[u]=1;
eF(h,i,u)
if(!vis[to[i]]) DFS1(to[i]);
dfn[u]=++cnt; idf[cnt]=u;
} void DFS2(int u){
vis[u]=1; SCC[u]=CCn; ++siz[CCn]; ins3(CCn,u);
eF(h2,i,u)
if(!vis[to[i]]) DFS2(to[i]);
} void Kosaraju(){
F(i,1,n) if(!vis[i]) DFS1(i);
memset(vis,0,sizeof vis);
dF(i,n,1) if(!vis[idf[i]]) ++CCn, DFS2(idf[i]);
F(u,1,CCn){
eF(h3,i,u)
eF(h,j,to[i])
if(SCC[to[j]]!=u)
Out[u]=1; goto ed;
ed : ;
}
siz[Ans=0]=n+1;
F(i,1,CCn) if(!Out[i]&&siz[Ans]>siz[i]) Ans=i;
} int main(){
init();
Kosaraju();
printf("%d\n",siz[Ans]);
eF(h3,i,Ans) printf("%d ",to[i]);
return 0;
}

【codeforces】【比赛题解】#950 CF Round #469 (Div. 2)的更多相关文章

  1. 竞赛题解 - CF Round #524 Div.2

    CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 ...

  2. Codeforces Round #469 (Div. 2)

    Codeforces Round #469 (Div. 2) 难得的下午场,又掉分了.... Problem A: 怎么暴力怎么写. #include<bits/stdc++.h> #de ...

  3. CF Round #551 (Div. 2) D

    CF Round #551 (Div. 2) D 链接 https://codeforces.com/contest/1153/problem/D 思路 不考虑赋值和贪心,考虑排名. 设\(dp_i\ ...

  4. CF Round #510 (Div. 2)

    前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...

  5. CF Round #600 (Div 2) 解题报告(A~E)

    CF Round #600 (Div 2) 解题报告(A~E) A:Single Push 采用差分的思想,让\(b-a=c\),然后观察\(c\)序列是不是一个满足要求的序列 #include< ...

  6. cf Round#273 Div.2

    题目链接,点击一下 Round#273 Div.2 ================== problem A Initial Bet ================== 很简单,打了两三场的cf第一 ...

  7. 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)

    终于打了一场CF,不知道为什么我会去打00:05的CF比赛…… 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...

  8. 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)

    没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...

  9. 【codeforces】【比赛题解】#869 CF Round #439 (Div.2)

    良心赛,虽然我迟了半小时233333. 比赛链接:#869. 呃,CF的比赛都是有背景的……上次是<哈利波特>,这次是<物语>…… [A]巧妙的替换 题意: Karen发现了石 ...

随机推荐

  1. POJ1637_Sightseeing tour

    给一个联通图,有的是单向边,有的是双向边,问是否存在欧拉回路. 乍一看毫无思路,可以这样来搞,对于每条无向边,我们随便指定一个方向,看看是否能够做到所有点的度数之和为偶数. 接下来,对于我们指定的边, ...

  2. Petr and Permutations CodeForces - 987E(逆序对)

    题意: 给出一个长度为n的序列,求出是谁操作的(原序列为从小到大的序列),Peter的操作次数为3n,Alex的操作次数为7n+1 解析: 我们来看这个序列中的逆序对,逆序对的个数为偶数则操作次数为偶 ...

  3. MT【123】利用第一次的技巧

    已知 \(r_1=0,r_{100}=0.85,(r_k\) 表示投 k 次投中的概率.) 求证:(1)是否存在\(n_0\)使得\(r_{n_0}=0.5\) (2)是否存在\(n_1\)使得\(r ...

  4. Alpha 冲刺 —— 十分之四

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助前后端接口的开发 测试项目运行的服务器环 ...

  5. 解题:POI 2006 Periods of Words

    题面 洛谷翻译有毒系列 正常人能看懂的题面:若$S$可以通过前缀$s$重复若干次(可重叠)来表示($s!=S$),则称$s$是$S$的一个循环串.求一个字符串所有前缀(包括本身)的最长循环串的长度之和 ...

  6. [网络流]小M的作物

    小\(M\)的作物(最小割) 做的第一道网络流,因为一个智障错误调了好久嘤嘤嘤 题目描述 小\(M\)在\(MC\)里开辟了两块巨大的耕地\(A\)和\(B\)(你可以认为容量是无穷),现在,小\(P ...

  7. Python实现类似JavaScript 的Json对象

    Python实现类似JavaScript 的Json对象 用过js的都知道 js中json也是一个对象,所以可以直接通过class.attr 取值,当attr不存在时也不会报错,那么Python可不可 ...

  8. Linux上给php配置redis扩展

    说明,在项目开发中难免会遇到redis中,那我应该如何配置redis这样的一个扩展呢,看下面流程: 一.安装Redis PHP在安装redis扩展时,难免要看一下官网下载安装流程,链接如下: http ...

  9. Linux可执行文件后缀问题

    一般来说,可执行文件没有扩展名. Linux不根据扩展名判断文件类型,而是根据文件的内容来判断.所以扩展名的作用是帮助人来识别文件,对于Linux系统本身来说没有什么用处. .sh结尾表示是shell ...

  10. 四、Linux学习之文件处理命令

    1.建立目录:mkdir 格式:mkdir –p [目录名] -p     递归创建目录 注意事项: 如果是创建单个目录直接mkdir [目录名就可以] 如果是创建一个目录下的目录也就是递归创建目录请 ...