Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)
Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)
说一点东西:
昨天晚上$9:05$开始太不好了,我在学校学校$9:40$放学我呆到十点然后还要跑回家耽误时间....要不然$D$题就写完了
周末一些成绩好的同学单独在艺术楼上课然后晚上下第一节晚自习和他们在回廊里玩开灯之后再关上一片漆黑真好玩
日常煞笔提.....我竟然$WA$了一次忘了$n<<1$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=2e5+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,a,vis[N],now,ans;
int main(){
//freopen("in","r",stdin);
n=read()<<;
for(int i=;i<=n;i++){
a=read();
if(!vis[a]) now++,vis[a]=;
else now--;
ans=max(ans,now);
}
printf("%d",ans);
}
B.The Meeting Place Cannot Be Changed
题意:数轴上$n$个点告诉你每个点坐标和移动速度,找一个点使得所有点都到那个点时间最短,求最短时间
各种加权平均没搞过去,最后急了我这是信息学竞赛不是数学竞赛不是物理竞赛,二分答案水过去...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=6e4+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n;
double x[N],v[N];
bool check(double g){
double l=,r=1e9;
for(int i=;i<=n;i++) l=max(l,x[i]-g*v[i]),r=min(r,x[i]+g*v[i]);
return l<=r;
}
int main(){
//freopen("in","r",stdin);
n=read();
for(int i=;i<=n;i++) x[i]=read();
for(int i=;i<=n;i++) v[i]=read();
double l=,r=1e9;
double eps=1e-;
while(r-l>eps){
double mid=(l+r)/;
if(check(mid)) r=mid;
else l=mid;
}
printf("%lf",l);
}
C.Andryusha and Colored Balloons
题意:一棵树,$a--b--c$这样的三个点不能是相同颜色,求染色最少用几种颜色,并输出一个方案
一眼看出与同一个点相连的颜色不同,最大度数$+1$就行了
然后被构造方案卡住了.....
想记录每个点的相邻点的颜色集合感觉会被菊花图卡(为什么别人都几百ms我77ms)
于是发现对于一个点除了父亲和自己颜色不是从小到大其他都可以从小到大分配,记录一下一个点分配到哪里遇到自己和父亲跳过就行了
MD想了好长时间
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=2e5+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,de[N],u,v;
struct edge{
int v,ne;
}e[N<<];
int h[N],cnt;
inline void ins(int u,int v){
cnt++;
e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
cnt++;
e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt;
}
int ans,col[N],fa[N],now[N];
void dfs(int u){
for(int i=h[u];i;i=e[i].ne){
int v=e[i].v;
if(v==fa[u]) continue;
fa[v]=u;
now[u]++;
while(now[u]==col[u]||now[u]==col[fa[u]]) now[u]++;
col[v]=now[u];
dfs(v);
}
}
int main(){
//freopen("in","r",stdin);
n=read();
for(int i=;i<n;i++) u=read(),v=read(),de[u]++,de[v]++,ins(u,v);
for(int i=;i<=n;i++) ans=max(ans,de[i]+);
printf("%d\n",ans);
fa[]=;col[]=;
dfs();
for(int i=;i<=n;i++) printf("%d ",col[i]);
}
D.Innokenty and a Football League
题意:
队伍$i$有两种候选名字$a_i\ b_i$,选了$b_i$的话不能有其他队伍$j$选了$a_j\:a_i==a_j$
每个队伍名字不能相同,求一个方案
发现有相同$a$的队伍只能选$b$,先处理这些
$a$唯一的队伍任意选,只要满足没有两只队伍选一样就行了,我建了个网络流.....
$s \rightarrow team \rightarrow name_a,name_b \rightarrow t$
容量都为$1$
(好像只有$Candy?$这个沙茶用了这么$zz$的做法)
然后比赛结束好没写完,后来又发现好多细节问题:
$1.$先把$a$唯一的队伍中那些已经被不唯一的选过的名字处理掉不要建到图里去
$2.$一个名字只能往$t$连一条边,所以判断一下$builded$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
using namespace std;
typedef long long ll;
const int N=,M=1e5+,INF=1e9;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,a[N],b[N],m;
char str[];
int has[M],c[M]; int s,t;
struct edge{
int v,c,f,ne;
}e[M<<];
int cnt,h[N];
inline void ins(int u,int v,int c){
cnt++;
e[cnt].v=v;e[cnt].c=c;e[cnt].f=;e[cnt].ne=h[u];h[u]=cnt;
cnt++;
e[cnt].v=u;e[cnt].c=;e[cnt].f=;e[cnt].ne=h[v];h[v]=cnt;
}
int cur[N],d[N],vis[N];
int q[N],head,tail;
bool bfs(){
head=tail=;
memset(vis,,sizeof(vis));
d[s]=;vis[s]=;q[tail++]=s;
while(head!=tail){
int u=q[head++];
for(int i=h[u];i;i=e[i].ne){
int v=e[i].v;
if(!vis[v]&&e[i].c>e[i].f){
vis[v]=;d[v]=d[u]+;
q[tail++]=v;
if(v==t) return true;
}
}
}
return false;
}
int dfs(int u,int a){
if(u==t||a==) return a;
int flow=,f;
for(int &i=cur[u];i;i=e[i].ne){
int v=e[i].v;
if(d[v]==d[u]+&&(f=dfs(v,min(e[i].c-e[i].f,a)))>){
flow+=f;
e[i].f+=f;
e[((i-)^)+].f-=f;
a-=f;
if(a==) break;
}
}
if(a) d[u]=-;
return flow;
}
int dinic(){
int flow=;
while(bfs()){
for(int i=s;i<=t;i++) cur[i]=h[i];
flow+=dfs(s,INF);
}
return flow;
} int id[M],tot;
string ss[M];
int choose[N];
int builded[N];
int main(){
//freopen("in","r",stdin);
n=read();
for(int i=;i<=n;i++){
scanf("%s",str);
int x=str[]-'A'+,y=str[]-'A'+,z=str[]-'A'+;
a[i]=x**+y*+z;
has[a[i]]++;
ss[a[i]]=string(str,); scanf("%s",str);
z=str[]-'A'+;
b[i]=x**+y*+z;
ss[b[i]]=ss[a[i]];ss[b[i]][]=str[]; m=max(m,max(a[i],b[i]));
//printf("hi %d %d ",a[i],b[i]);cout<<ss[a[i]]<<" "<<ss[b[i]]<<endl;
}
for(int i=;i<=n;i++) if(has[a[i]]>){
c[b[i]]++,choose[i]=b[i];
if(c[b[i]]>) {puts("NO");return ;}
} tot=n;
for(int i=;i<=n;i++) if(has[a[i]]==){
if(!id[a[i]]&&c[a[i]]==) id[a[i]]=++tot;
if(!id[b[i]]&&c[b[i]]==) id[b[i]]=++tot;
}
s=;t=tot+;
int sum=;
for(int i=;i<=n;i++) if(has[a[i]]==){
sum++;
ins(s,i,);
if(id[a[i]]){
int x=id[a[i]];
ins(i,x,);
if(!builded[x]) ins(x,t,),builded[x]=;
}
if(id[b[i]]){
int x=id[b[i]];
ins(i,x,);
if(!builded[x]) ins(x,t,),builded[x]=;
}
}
int flow=dinic();
if(flow!=sum){puts("NO");return ;} puts("YES"); for(int u=;u<=n;u++) if(has[a[u]]==){
for(int i=h[u];i;i=e[i].ne) if(e[i].f==){
if(e[i].v==id[a[u]]) choose[u]=a[u];
if(e[i].v==id[b[u]]) choose[u]=b[u];
}
} //for(int i=1;i<=n;i++) printf("choose %d %d %d\n",i,choose[i],1);
for(int i=;i<=n;i++) cout<<ss[choose[i]]<<'\n';
}
然后从__stdcall(我发现这个名字有毒卡latex)和$zyf2000$哪里看到$2SAT$做法
1、第一种相同,那么必须都选第二种 2、第二种相同,不能同时选第二种 3、第一种和第二种相同,不能同时选第一种和第二种
题意:
$n$点$m$边找$k$条路径每个点至少覆盖一次,每条路径长度$\le \lceil \frac{2n}{k}\rceil$
赛后补提...
直接搞一个既不是$dfs$序也不是欧拉序列的$dfs$序列,访问完一个孩子就把父亲加入序列,序列长度不会超过$2*n$因为一个点最多给父亲贡献一次
然后第$7$个点貌似整除了$WA$了几次....又改了一个输出方式才过
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=4e5+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,m,k;
struct edge{
int v,ne;
}e[N<<];
int h[N],cnt;
inline void ins(int u,int v){
cnt++;
e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
cnt++;
e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt;
}
int vis[N];
int a[N<<],p;
void dfs(int u){
vis[u]=;
a[++p]=u;
for(int i=h[u];i;i=e[i].ne)
if(!vis[e[i].v]) dfs(e[i].v),a[++p]=u;
}
int main(){
//freopen("in","r",stdin);
n=read();m=read();k=read();
for(int i=;i<=m;i++) ins(read(),read());
dfs();
int c=ceil((double)*n/k);
int x=p/c,y=p%c,now=;
for(int i=;i<=k;i++){
if(i<=x){
printf("%d ",c);
for(int j=i;j<=i+c-;j++) printf("%d ",a[++now]);
}else if(i==x+&&y!=){
printf("%d ",y);
for(int j=;j<=y;j++) printf("%d ",a[++now]);
}else printf("1 1");
puts("");
}
return ;
}
F.http://www.cnblogs.com/candy99/p/6511222.html
Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)的更多相关文章
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) D. Innokenty and a Football League
地址:http://codeforces.com/contest/782/problem/D 题目: D. Innokenty and a Football League time limit per ...
- 树的性质和dfs的性质 Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) E
http://codeforces.com/contest/782/problem/E 题目大意: 有n个节点,m条边,k个人,k个人中每个人都可以从任意起点开始走(2*n)/k步,且这个步数是向上取 ...
- 2-sat Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) D
http://codeforces.com/contest/782/problem/D 题意: 每个队有两种队名,问有没有满足以下两个条件的命名方法: ①任意两个队的名字不相同. ②若某个队 A 选用 ...
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) E Underground Lab
地址:http://codeforces.com/contest/782/problem/E 题目: E. Underground Lab time limit per test 1 second m ...
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) C Andryusha and Colored Balloons
地址:http://codeforces.com/contest/782/problem/C 题目: C. Andryusha and Colored Balloons time limit per ...
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) B. The Meeting Place Cannot Be Changed
地址:http://codeforces.com/contest/782/problem/B 题目: B. The Meeting Place Cannot Be Changed time limit ...
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) A. Andryusha and Socks
地址:http://codeforces.com/contest/782/problem/A 题目: A. Andryusha and Socks time limit per test 2 seco ...
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)A模拟 B三分 C dfs D map
A. Andryusha and Socks time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals )D. Innokenty and a Football League(2-sat)
D. Innokenty and a Football League time limit per test 2 seconds memory limit per test 256 megabytes ...
随机推荐
- 哈密顿绕行世界问题(dfs+记录路径)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181 哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) ...
- linux 操作系统/xxx目录下都是什么文件?
/bin:存放最常用命令: /dev:设备文件: /etc:存放各种配置文件: /home:用户主目录: /lib:系统最基本的动态链接共享库: /mnt:一般是空的,用来临时挂载别的文件系统: /b ...
- 构建LVS-DR+Keepalive高可用集群
------client----------主LVS----------从LVS------------WEB1-------------WEB2--------- 2.2.2.250 2.2.2. ...
- [国嵌攻略][061][2440LCD驱动设计]
LCD初始化 1.引脚初始化 2.时序初始化 VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数 VFBD(vertical front porch ...
- 20170723-Ioc与AOP
Ioc与AOP 功能.语法.分类.原理.例子.补充(AOP-Ioc-DI) 1.AOP: ①功能体现:是拦截,过滤器: ②相关语法:借助特性语法作为切入点: ③实现方式分类:动态代理+静态织入: ④实 ...
- Spark算子--first、count、reduce、collect、lookup
转载请标明出处http://www.cnblogs.com/haozhengfei/p/4b8582c8dde1529abb11e4ccc8296171.html first.count.reduce ...
- 从零开始学习前端JAVASCRIPT — 1、JavaScript基础
1:定义:javascript是一种弱类型.动态类型.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类 ...
- TP框架自带的正则验证的规则
thinkphp框架里面自带有很多自动验证的规则,下面是框架自带的正则验证的规则,官方的说明文档里面没有这么多,所以记下来,以备使用. view sourceprint? 01 static $reg ...
- AVFrame转换到Mat,yuv420p转换到RGB源代码
FFmpeg中AVFrame到OpenCV中Mat的两种转换方法 方法一:查表法 void AVFrame2Img(AVFrame *pFrame, cv::Mat& img) { int f ...
- 显示/隐藏Mac隐藏文件
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏Mac隐藏文件的命令:defaults writ ...