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 题意: 给两个矩形,一个再上一个在下,求两个矩形合并的周围一圈的面积. 思路: 因为存在下面矩形宽度大 ...
随机推荐
- 大数据入门第二十天——scala入门(一)入门与配置
一.概述 1.什么是scala Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序. ...
- go语言之行--简介与环境搭建
一.Go简介 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后 ...
- 20155207 EXP6 信息搜集与漏洞扫描
20155207 EXP6 信息搜集与漏洞扫描 基础问题回答 1)哪些组织负责DNS,IP的管理. ICANN统一管理全球根服务器 全球根域名服务器(13台) 地区性注册机构(5个)ARIN RIPE ...
- 2017-2018 Exp1 PC平台逆向破解 20155214
目录 Exp1 PC平台逆向破解 实验内容 知识点 官方源 中科大源 上海交大的源 新加坡源 debain源 debian安全更新源 163源的地址 阿里云kali源 启发 评论 Exp1 PC平台逆 ...
- 2017-2018-2 20155231《网络对抗技术》实验八: WEB基础实验
2017-2018-2 20155231<网络对抗技术>实验八:Web基础 实验要求: Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...
- 20155302《网络对抗》Exp4 恶意代码分析
20155302<网络对抗>Exp4 恶意代码分析 实验要求 •是监控你自己系统的运行状态,看有没有可疑的程序在运行. •是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工 ...
- 小白之selenium+python关于cookies绕开登录2
首先,由于新开始在博客园中写随笔,可能在内容的布局方面就不太懂,导致布局很丑,各位见谅,但是字还是原来的那字,内容还是原来的内容,少了点包装, 下面是对cookie的扩展知识 1.配置文件存储在哪里? ...
- 初入Installshield2015
首先我们来认识一下这款软件:这是一款功能强大的软件打包工具,有着许多强大的功能等着我们去发掘,博主也是最近被这个东西搞得有点晕头, 现在就想让读者朋友们更快的接受这个软件. 这个软件需要的破解工具,大 ...
- openstack horizon 开发第三天
工作流:工作流是带有选项的复杂表单,每个工作流必须包含扩展Workflow, Step和的类Action1. url.py 路由处理 RESOURCE_CLASS = r'^(?P<resour ...
- PAT甲题题解-1042. Shuffling Machine (20)-模拟
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789205.html特别不喜欢那些随便转载别人的原创文章又不给 ...