第一次打codeforces,还是太菜了

代码全部来自大神void_f

C

#include <cstdio>
#include <vector>
#include <ctype.h>
using namespace std;
vector<int> Ans[200010];
int p,cnt,n=1;
int main(){
for(char ch=getchar();isdigit(ch);ch=getchar(),n++)
if(ch=='1'){
if(!p){printf("-1\n");return 0;}
Ans[p--].push_back(n);
}
else if(p==cnt) Ans[p=++cnt].push_back(n);
else Ans[++p].push_back(n); if(p<cnt){printf("-1\n");return 0;} printf("%d\n",cnt);
for(int i=1;i<=cnt;++i){
printf("%d ",Ans[i].size());
for(int j=0;j<Ans[i].size();++j)
printf("%d ",Ans[i][j]);
printf("\n");
}
return 0;
}

求一个1010序列中可以分解为多少个 zebra字串 (以0开始结束 中间01相间的 ,不必要相连 但是先后顺序要一样)

我们要注意到这样的事实, 就是生成的zerba 并没有顺序,我们可以假想已经生成的zebra,都分别抽取出来,排成一列,而且由于特性的原因,我们可以在维护的过程中,保持前p个 zebra 是以1结尾的(遇见0给p接上,p--) 遇见一(p++ 接上)

0101

010

0

cnt : 当前生成的zebra 数量

p : 当前生成的zerba中以1为结尾的数量

ans _vec

当时还是没有从这个角度想吧(没能吧字串想的展开)

D

数字 1 2 3 4 5 6 7 8

位置 12345678910 总之是奇数位置上有数字,偶数位置上没有数字

数学问题,仔细想想,观察移动规律的题,每一次移动都是选取最大的数移动到最近的空

规律1 所有奇数不会被占有,前1/2 位置的奇数本身就不会挪位,后面的奇数一旦空出位置来就再也不会被取代了

偶数是有可能被占有的,我们追踪每一个偶数移动的规律

我们想知道一个偶数位置的数 2*i 上一个位置在哪,那么首先显然这个偶数之前还有空位置,之后已经没有空位置了

那么这个偶数位置是 2i 那么之前的位置就有i 个数字

之后的数字就有 n-i-1 个(前面i个数字 ,再包括那个数字本身)

那么这个数字上一次的位置就应该在

2
i + (n-i-1) +1 个处 即 n+i处

x是偶数,那么上次位置就在 n+x/2 处

如果一直是偶数就递归处理 直到奇数为止

 #include <cstdio>
long long n,x;
int q;
int main(){
scanf("%I64d%I64d",&n,&q);
while(q--){
scanf("%I64d",&x);
while(!(x&1)) x=(x>>1)+n;
printf("%I64d\n",(x+1)>>1);
}
return 0;
}

E 是抽象了就是给定一个有向图,

对于一个点来说,他的值是从他可以到达点格个数 ,找到值最小的点

经典算法:

考虑到有向图,使用tarjan 算法

时间戳数组 dfn

标记数组 记录当前节点扩展到的最早节点 low

同一个low值的节点在一个强联通子图内

我们将一个可能有环的图通过缩点,变成了一个没有环的图

找到其中一个没有初度的规模最小的,点就是答案

方法2:Kosaraju

首先dfs,但是是后序打标记,就是时间戳.

然后从上述标机的最大值开始 ,从反向图中进行深搜,每一次如果搜到本轮的节点,就返回 ,搜到前几轮的节点,说明那个轮次的节点不能使用

理解:

对于第一次深搜,实际上是给出了,缩点的拓扑排序。

我们可以保证,将一个强连通子图缩微一点,

后序的深搜事实上是保证了拓扑排序的正确行。

确实,理解以后有一种"较大的快感"

#include<bits/stdc++.h>
using namespace std;
const int N=100100;
int n,m,h,st[N],sz[N],vis[N],cnt,scnt,vd[N],sn[N],a[N];
vector<int>vec[N],vec2[N]; void dfs1(int x){
if(vis[x])return;
vis[x]=1;
for(int i=0;i<vec[x].size();i++)dfs1(vec[x][i]);
st[++cnt]=x;
}
void dfs2(int x){
if(sn[x]){
if(sn[x]!=scnt)vd[sn[x]]=1;
return;
}
sn[x]=scnt;sz[scnt]++;
for(int i=0;i<vec2[x].size();i++)dfs2(vec2[x][i]);
} int main(){
scanf("%d%d%d",&n,&m,&h);
for(int i=1;i<=n;i++)scanf("%d",a+i);
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
if((a[u]-a[v]+h)%h==1)vec[v].push_back(u),vec2[u].push_back(v);
if((a[v]-a[u]+h)%h==1)vec[u].push_back(v),vec2[v].push_back(u);
}
for(int i=1;i<=n;i++)dfs1(i);
for(int i=n;i;i--)
if(!sn[st[i]]){
scnt++;dfs2(st[i]);
}
int ans=0;sz[0]=n+1;
for(int i=1;i<=scnt;i++)if(!vd[i]&&sz[i]<sz[ans])ans=i;
printf("%d\n",sz[ans]);
for(int i=1;i<=n;i++)if(sn[i]==ans)printf("%d ",i);
return 0;
}

round 469的更多相关文章

  1. Codeforces Round #469 (Div. 2)

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

  2. Codeforces Round #469 (Div. 2)C. Zebras(思维+模拟)

    C. Zebras time limit per test memory limit per test 512 megabytes input standard input output standa ...

  3. 【codeforces】【比赛题解】#950 CF Round #469 (Div. 2)

    剧毒比赛,至少涨了分对吧.: ( [A]Left-handers, Right-handers and Ambidexters 题意: 有\(l\)个右撇子,\(r\)个左撇子,\(a\)个双手都惯用 ...

  4. Codeforces Round #469 (Div. 2) F. Curfew

    贪心 题目大意,有2个宿管分别从1和n开始检查房间,记录人数不为n的房间个数,然后锁住房间. 没有被锁的房间中的学生可以选择藏在床底,留在原地,或者转移(最远转移d个房间)   然后抄了网上大神的代码 ...

  5. Codeforces Round #469 (Div. 2) E. Data Center Maintenance

    tarjan 题意: 有n个数据维护中心,每个在h小时中需要1个小时维护,有m个雇主,他们的中心分别为c1,c2,要求这两个数据中心不能同时维护. 现在要挑出一个数据中心的子集,把他们的维护时间都推后 ...

  6. Codeforces Round #469 Div. 2 A B C D E

    A. Left-handers, Right-handers and Ambidexters 题意 \(l\)个左撇子,\(r\)个右撇子,\(a\)个两手均可.要组成一支队伍,里面用左手的人数与用右 ...

  7. Codeforces Round #469 Div. 2题解

    A. Left-handers, Right-handers and Ambidexters time limit per test 1 second memory limit per test 25 ...

  8. Codeforces Round #469 (Div. 1) 949C C. Data Center Maintenance (Div. 2 950E)

    题 OvO http://codeforces.com/contest/949/problem/C codeforces 949C 950E 解 建图,记原图为 G1,缩点,记缩完点后的新图为G2 缩 ...

  9. Running to the End(Codeforces & AtCoder 百套计划)

    ...Reserved for the future... 仿照xxy dalao的CF&CC百套计划,做了一个Codeforces & AtCoder 百套计划,按这个速度刷下去,每 ...

随机推荐

  1. Ubuntu下使用SSH 命令用于登录远程桌面

    https://blog.csdn.net/yucicheung/article/details/79427578 问题描述 做DL的经常需要在一台电脑(本地主机)上写代码,另一台电脑(服务器,计算力 ...

  2. LUOGU P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)

    传送门 解题思路 学习了一下玄学算法--模拟退火,首先要求平衡处,也就是求势能最小的地方,就是求这个点到所有点的距离*重量最小.剩下的几乎是模拟退火的板子了. #include<iostream ...

  3. 19-10-28-A

    竟然?竟然?竟然? 我已经用了半个键盘的编号了$\text{T_T}$ $\mathbb{AFO}$感稍强 h1是不是有点大? ZJ+TJ: T1 以为是什么数据结垢,但是是个链表. 所以可以使用 v ...

  4. iOS开发CGImage.h简介

    1.前因 由于剪切图片用到下面方法,此方法属于CGImage.h中,通过创建CGImageRef像素位图,可以通过操作存储的像素位来编辑图片. /* Create an image using the ...

  5. hibernate离线条件查询设置or关系

    detachedCriteria.add(Restrictions.or(Restrictions.isNull(""), Restrictions.isNull("&q ...

  6. Ubuntu安装CUDA9.2(不更新驱动)

    1.先装驱动,以为安装CUDA时安装最新驱动导致CUDA用不了 sudo apt-get install nvidia-396 2.参考这,安装好CUDA 9.2 https://developer. ...

  7. 附录C 准备NCDC气象数据(加解释)

    附录C 准备NCDC气象数据 这里首先简要介绍如何准备原始气象数据文件,以便我们能用Hadoop对它们进行分析.如果打算得到一份数据副本供Hadoop处理,可按照本书配套网站(网址为http://ww ...

  8. C++ 静态对象

    一:什么是静态对象?     对象的存储方式是静态的.        局部静态对象和类的静态对象.      局部静态对象:一个变量在函数内部定义,其生命周期跨越了该函数的多次调用.局部对象确保不迟于 ...

  9. linux拆分文件

    1.先看下文件总的行数: wc -l filename 我们现在来看看它具体的参数该怎么用: split支持自定义输出文件大小和输出文件行数两种模式,此外还可以定义每一行最大的值. -l 按输出文件行 ...

  10. PHP7中标量类型declare的用法详解

    这篇文章主要介绍了PHP7标量类型declare用法,结合实例形式分析了PHP7中标量类型declare的功能.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了PHP7标量类型declare用 ...