Codeforces Round #541
因为这次难得不在十点半(或是更晚),大家都在打,然后我又双叒叕垫底了=。=
自己对时间的分配,做题的方法和心态还是太蒻了,写的时候经常写一半推倒重来。还有也许不是自己写不出来,而是在开始写之前就觉得自己写不出来
多打CF
A.Sea Battle
讨论.jpg
也有式子的解法,我没想
B.Draw
讨论失败.jpg
(写题顺序:ADFC,没有B)
讨论个**,转化成线段求交,答案就是$\sum max(0,min(x,y)-max(lstx,lsty)+(lstx!=lsty))$,记得加上一开始的1
C.Birthday
赛场降智->枚举两边$n^2$+排序后中间轮着放检查$n$->$n^3$睿智算法
正确答案->不知为啥还要枚举,排序以后直接轮着放->$n\log n$
D.Gourmet choice
并查集+拓扑排序
- #include<queue>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=,M=;
- int num[N],aset[N],que[N],bel[N];
- int p[N],noww[M],goal[M],deg[N];
- int n,m,f,b,t1,t2,cnt,tot,ff;
- char rd[][];
- int Finda(int x)
- {
- return x==aset[x]?x:aset[x]=Finda(aset[x]);
- }
- void Link(int f,int t)
- {
- noww[++cnt]=p[f],deg[t]++;
- goal[cnt]=t,p[f]=cnt;
- }
- int main ()
- {
- scanf("%d%d",&n,&m);
- for(int i=;i<=n+m;i++) aset[i]=i;
- for(int i=;i<=n;i++)
- {
- scanf("%s",rd[i]+);
- for(int j=;j<=m;j++)
- if(rd[i][j]=='=')
- aset[Finda(i)]=Finda(j+n);
- }
- for(int i=;i<=n+m;i++) bel[i]=Finda(i);
- for(int i=;i<=n;i++)
- for(int j=;j<=m;j++)
- {
- if(rd[i][j]=='<') Link(bel[i],bel[j+n]);
- if(rd[i][j]=='>') Link(bel[j+n],bel[i]);
- }
- for(int i=;i<=n+m;i++)
- if(!deg[i]) que[++b]=i,num[i]=;
- while(f<=b)
- {
- int tn=que[f++];
- for(int i=p[tn];i;i=noww[i])
- if(!(--deg[goal[i]]))
- que[++b]=goal[i],num[goal[i]]=num[tn]+;
- }
- for(int i=;i<=n+m;i++) if(deg[i]) printf("No"),exit(); puts("Yes");
- for(int i=;i<=n;i++) printf("%d ",num[bel[i]]); puts("");
- for(int i=n+;i<=n+m;i++) printf("%d ",num[bel[i]]);
- return ;
- }
E.String Multiplication
请讨论.jpg
答案只和最大子段,前缀连续和后缀连续有关,枚举哪个字符作为答案之后再统计就比较简单了
但是仍然有很多细节=。=
- #include<cstdio>
- #include<string>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- const int N=;
- string str[N]; long long ans;
- int main()
- {
- int n; cin>>n;
- for(int i=;i<=n;i++)
- cin>>str[i];
- for(int i='a';i<='z';i++)
- {
- long long maxi=;
- for(int j=;j<=n;j++)
- {
- int len=str[j].size();
- long long lst=,tmp=,pre=,suf=;
- for(int k=;k<len;k++)
- (str[j][k]==i)?lst=max(lst,++tmp):tmp=;
- if(lst||maxi)
- {
- for(int k=;k<len;k++)
- if(str[j][k]==i) pre++;
- else break;
- for(int k=len-;~k;k--)
- if(str[j][k]==i) suf++;
- else break;
- if(lst==len) maxi=(maxi+)*lst+maxi;
- else maxi=maxi?max(lst,pre+suf+):lst;
- }
- }
- ans=max(ans,maxi);
- }
- printf("%lld",ans);
- return ;
- }
F.Asya And Kittens
并查集维护小猫之间的连通性,同时维护每只小猫的下一只小猫和当前小猫链里最后一只小猫是谁。
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=;
- int n,st,t1,t2,cnt;
- int aset[N],nxt[N],endp[N];
- int Finda(int x)
- {
- return x==aset[x]?x:aset[x]=Finda(aset[x]);
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<=n;i++) aset[i]=endp[i]=nxt[i]=i;
- for(int i=;i<n;i++)
- {
- scanf("%d%d",&t1,&t2);
- int t3=Finda(t1),t4=Finda(t2);
- aset[t3]=t4,nxt[endp[t4]]=t3,endp[t4]=endp[t3];
- }
- for(int i=;i<=n;i++)
- if(Finda(i)==i) {st=i; break;}
- while(nxt[st]!=st)
- printf("%d ",st),st=nxt[st];
- printf("%d",st);
- return ;
- }
G.Most Dangerous Shark
单调栈优化DP,代码咕咕了
Codeforces Round #541的更多相关文章
- Codeforces Round #541 (Div. 2)
Codeforces Round #541 (Div. 2) http://codeforces.com/contest/1131 A #include<bits/stdc++.h> us ...
- Codeforces Round #541 (Div. 2)题解
不知道该更些什么 随便写点东西吧 https://codeforces.com/contest/1131 ABC 太热了不写了 D 把相等的用并查集缩在一起 如果$ x<y$则从$ x$往$y$ ...
- Codeforces Round #541 (Div. 2) D(并查集+拓扑排序) F (并查集)
D. Gourmet choice 链接:http://codeforces.com/contest/1131/problem/D 思路: = 的情况我们用并查集把他们扔到一个集合,然后根据 > ...
- Codeforces Round #541 (Div. 2) (A~F)
目录 Codeforces 1131 A.Sea Battle B.Draw! C.Birthday D.Gourmet choice(拓扑排序) E.String Multiplication(思路 ...
- Codeforces Round #541 (Div. 2) G dp + 思维 + 单调栈 or 链表 (连锁反应)
https://codeforces.com/contest/1131/problem/G 题意 给你一排m个的骨牌(m<=1e7),每块之间相距1,每块高h[i],推倒代价c[i],假如\(a ...
- Codeforces Round #541 (Div. 2) E 字符串 + 思维 + 猜性质
https://codeforces.com/contest/1131/problem/D 题意 给你n个字符串,字符串长度总和加起来不会超过1e5,定义字符串相乘为\(s*s1=s1+s[0]+s1 ...
- Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序
https://codeforces.com/contest/1131/problem/D 题意 给你一个n*m二维偏序表,代表x[i]和y[j]的大小关系,根据表构造大小分别为n,m的x[],y[] ...
- Codeforces Round #541 (Div. 2) C.Birthday
链接:https://codeforces.com/contest/1131/problem/C 题意: 求给的n个数,相邻差值最小的排列方式.1-n相邻. 思路: sort后隔一个取一个,取到底后再 ...
- Codeforces Round #541 (Div. 2) B.Draw!
链接:https://codeforces.com/contest/1131/problem/B 题意: 给n次足球比分,求存在平局的机会. 思路: 结构体存储,unique后,判断是否有分数交叉. ...
- Codeforces Round #541 (Div. 2) A.Sea Battle
链接:https://codeforces.com/contest/1131/problem/A 题意: 给两个矩形,一个再上一个在下,求两个矩形合并的周围一圈的面积. 思路: 因为存在下面矩形宽度大 ...
随机推荐
- 20155318 Exp1 PC平台逆向破解(5)M
20155318 Exp1 PC平台逆向破解(5)M 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入 ...
- VS中为非控制台程序提供控制台输出窗口
/************************************************************************/ /* 模块名:ConsoleAdapter 文件名 ...
- 【干货】YUM安装PHP 7版本后,增加phalcon框架的报错解决
目录 1.yum安装php 7.x版本,此处部署7.3版本 2.安装phalcon框架 2.1.PHP版本依赖关系 2.2.编译phalcon扩展模块 2.3.增加扩展文件 3.部署phalcon遇到 ...
- [CF1009G]Allowed Letters[贪心+霍尔定理]
题意 给你一个长为 \(n\) 的串,字符集为 \(a,b,c,d,e,f\) .你可以将整个串打乱之后重新放置,但是某些位置上有一些限制:必须放某个字符集的字符.问字典序最小的串,如果无解输出 &q ...
- SpringCloud+Boot简单例子笔记
一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...
- 深入浅出OAuth2.0授权
一.前言 说到OAuth,先来一段百度到的比较官方的解释: OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信 ...
- 更改jenkins的默认工作空间并迁移插件和配置数据
最近刚使用阿里云ECS centos服务器,购买的是40G的系统盘,60G的数据盘. 昨天在查看服务器磁盘空间的时候,偶然发现 /dev/vda1 下面40G的空间已使用17G, 因为服务器才开始使用 ...
- Linux下tomcat的启动,关闭,以及shutdown失败杀死进程的方法
1.tomcat服务器第一次启动并查看启动日志的命令 在 ../bin 文件夹下输入./startup.sh;tail -f ../logs/catalina.out 2.需要重启服务器的时候 在 . ...
- python 游戏(井字棋)
1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') pr ...
- 微软职位内部推荐-Senior Software Engineer_HPC
微软近期Open的职位: Job Title: Senior Software Engineer_HPC Location: Shanghai, China Are you passionate ab ...