暑假爆零欢乐赛SRM08题解
这真的是披着CF外衣的OI赛制?我怎么觉得这是披着部分分外衣的CF?果然每逢cf赛制必掉rating,还是得%%%cyc橙名爷++rp。。
A题就是找一找序列里有没有两个连在一起的0或1,并且不能向两端延伸(比如……1001……或110……或者……100),找到了之后就可以把整个序列分成这两个数左边,这两个数和他的右边三部分,然后这两个0或1每个都能与左边右边串在一起构成两个相同的子序列,并且这个子序列在原序列中只会出现这两次,满足题目条件。如果没找到,再看看原来的序列里是不是只有两个0或1,那么这样单独一个0或1也只在序列里出现两次。要是上边两种情况都不满足,那么随便想想就知道不可能存在只出现两次的子序列。(cyc写n>10输出Y也过了,,,n很大的时候N的概率确实很小)
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
char s[];
int main()
{
int n,i,sum=;
scanf("%s",s); n=strlen(s);
for(i=;i<n;i++)
if(s[i]=='')sum++;
int flag=;
if(sum==||n-sum==||(s[]==s[]&&s[]!=s[]))flag=;
for(i=;i<=n;i++)
if(s[i-]!=s[i-]&&s[i-]==s[i-]&&s[i-]!=s[i])flag=;
if(flag)printf("Y");else printf("N");
}
A
B的话可以写bit优化dp(似乎也可以splay优化?不过我不会。。。)。用f[i][j]表示b序列跑到第i个数,a序列跑到第j个数的方案数,于是方程就是f[i][j]=sum(f[i-1][k])(1<=k<j&&b[i]+a[j]>=b[i-1]+a[k]),然后这个式子可以转化成a[k]<=b[i]-b[i-1]+a[j],把a排个序之后发现这个k的取值是连续的,就能愉快地bit单点修改+前缀和查询了。
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int mod=;
int n,m;
struct data{
int x,id;
}a[];
int b[],rank[],c[],f[][];
bool cmp(data a,data b){return a.x<b.x;}
int low(int x){return x&(-x);}
void add(int x,int k){for(;x<=n;x+=low(x))c[x]=(c[x]+k)%mod;}
int work(int x){int sum=;for(;x;x-=low(x))sum=(sum+c[x])%mod;return sum;}
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=;i<=n;i++)scanf("%d",&a[i].x),a[i].id=i;
for(i=;i<=m;i++)scanf("%d",&b[i]);
sort(a+,a+n+,cmp);
for(i=;i<=n;i++)rank[a[i].id]=i;
for(i=;i<=n;i++)f[][i]=;
for(i=;i<=m;i++){
for(j=;j<=n;j++)c[j]=;
for(j=;j<=n;j++){
int l=,r=n+;
while(l+<r){
int mid=(l+r)>>;
if(a[mid].x>b[i]-b[i-]+a[rank[j]].x)r=mid;else l=mid;
}
f[i][j]=work(l); add(rank[j],f[i-][j]);
}
}
int ans=;
for(i=;i<=n;i++)ans=(ans+f[m][i])%mod;
printf("%d",ans);
}
B
C的话,,,cyc的和正解的解法没看懂。不过看了tjm的代码,,,纳尼?随机化?把点随机对半分然后跑最短路,然后重复几次取最小值?不过这样如果rp不好没膜大佬还是会挂。。。那么有没有不用随机化的方法呢?我们发现把点集对半分后,没有跑过最短路的点对的两个点都是在这两个点集的某一个中,于是我们把两个点集每个再分成两半,第一个分成AB两部分,第二个分成CD两部分,然后把AC和BD重组成两个点集再跑一次。这样分分分分下去,分log(k)次,每个点对的距离肯定会在某一次跑最短路中被统计进答案。不过这样实现还是有点麻烦,直接把k个特殊点标号,然后按照每一二进制位的值分集合,实现就简便多了。
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
int fir[],to[],w[],ne[];
int dist[],q[],inq[];
int a[];
int n,m,k,tot=;
void add(int x,int y,int z){to[++tot]=y; w[tot]=z; ne[tot]=fir[x]; fir[x]=tot;}
int spfa(int p)
{
int i,h=,t=;
for(i=;i<=n;i++)dist[i]=<<,inq[i]=;
for(i=;i<=k;i++)
if(i&(<<p))q[++t]=a[i],dist[a[i]]=,inq[a[i]]=;
while(h<=t){
for(i=fir[q[h]];i;i=ne[i])
if(dist[q[h]]+w[i]<dist[to[i]]){
dist[to[i]]=dist[q[h]]+w[i];
if(!inq[to[i]]){
q[++t]=to[i]; inq[to[i]]=;
}
}
inq[q[h++]]=;
}
int ans=<<;
for(i=;i<=k;i++)
if(!(i&(<<p)))ans=min(ans,dist[a[i]]);
return ans;
}
int main()
{
int i,x,y,z;
scanf("%d%d%d",&n,&m,&k);
for(i=;i<=k;i++)scanf("%d",&a[i]);
for(i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z); add(x,y,z); add(y,x,z);
}
int ans=<<;
for(i=;i<=log(k);i++)ans=min(ans,spfa(i));
printf("%d",ans);
}
C
暑假爆零欢乐赛SRM08题解的更多相关文章
- 【题解】Comet OJ 国庆欢乐赛 简要题解
[题解]Comet OJ 国庆欢乐赛 简要题解 A 直接做 B 直接做,结论: \[ ans=\max([Max\ge \mathrm{sum}] Max,s[n]/2) \] C 考虑这样一个做法: ...
- Comet OJ 2019 夏季欢乐赛题解
Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...
- 爆零后的感受外加一道强联通分量HDU 4635的题解
今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句””,弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly ...
- ContestHunter暑假欢乐赛 SRM 05
T1 组合数,求一下乘法逆元就行了 没取模 没1LL* 爆零了 T2 让最大子段和最小就行,跑最大子段和的时候若超过S就弹出堆中最大的数,每次有负数加进来不断弹出最小的数相加重新加进堆直到为正数,因为 ...
- CSP-S 2021 爆零记
前言 本人今年高二蒟蒻OIer,高一刚刚接触OI. 感觉可能要直接退役了555~ 希望还有机会靠NOIP翻盘 Day - 暑假 为了备战CSP提前返校,与xzh一起划水,总之刷了不少题,我也大受震撼 ...
- 雅礼集训1-9day爆零记
雅礼集训1-9day爆零记 先膜一下虐爆我的JEFF巨佬 Day0 我也不知道我要去干嘛,就不想搞文化科 (文化太辣鸡了.jpg) 听李总说可以去看(羡慕)各路大佬谈笑风声,我就报一个名吧,没想到还真 ...
- CTS&&APIO2019爆零记
如果你只好奇测试相关请跳至day 2 day 3 day 6 scoi 2019 之后 由于实力问题,省选的时候排名在三十多,显然是没有进队.不过可能是受过的打击比较多,所以还没有特别颓废,甚至连 ...
- NOIp 0916 爆零记
题目来自神犇chad 上次爆零是说着玩,这次真的爆零了QAQ 好吧貌似是TYVJ的模拟赛打多了..一直按照TYVJ的格式提交的压缩包.. 然后莫名其妙就AK了hhh 来的时候迟到了半小时,昨晚痛苦的补 ...
- gdoi2017爆零记
前言 这次gdoi,用三个词来形容我:爆零+爆零+爆零.本来还希望能在gdoi搞个小新闻(拿个一等什么的). Day0 这次gdoi是在东莞东华中学,坐个动车下午3点多就到了,然后打个滴滴去酒店(本来 ...
随机推荐
- nyoj677 谍战
本题能够说是最小割入门级题目. 假设能想到是最小割问题.那么建图思路便是水到渠成的事了. 加入一个源点S和汇点T: 把S与每一个间谍相连.容量为无穷大: 把城市N(即飞机场的位置)与汇点T相连.容量为 ...
- 《从零开始学Swift》学习笔记(Day2)——使用Web网站编写Swift代码
Swift 2.0学习笔记——使用Web网站编写Swift代码 原创文章,欢迎转载.转载请注明:关东升的博客 Swift程序不能在Windows其他平台编译和运行,有人提供了一个网站swiftstub ...
- php5.4新特性实践
本机安装的是wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-32b.exe集成包 自带了php5.4 1. 数组写法 定义一个数组 过去: $arr = ...
- distinct与NULL在count的注意事项
select * from errorinfo ) from errorinfo select distinct info from errorinfo select count(distinct i ...
- 数据性能调校——查看最耗资源的各种SQL
从计划高速缓存中清除查询计划 DBCC FREEPROCCACHE 清除缓存中的过程 DBCC DROPCLEANBUFFERS清除内存中的数据 SELECT DB_ID('你的数据库名') tota ...
- 《Python机器学习》笔记(五)
通过降维压缩数据 在前面已经介绍了几种不同的特征选择技术对数据集进行降维的方法.另一种常用于降维的特征选择方法就是特征抽取.数据压缩也是机器学习领域中的一个重要内容.数据压缩技术可以帮助我们对数据及逆 ...
- 入坑第二式 golang入坑系列
史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/content/ )点个回放,看个重播.因 ...
- HAProxy安装及简单配置
一.HAProxy简介 代理的作用:web缓存(加速).反向代理.内容路由(根据流量及内容类型等将请求转发至特定服务器).转码器(将后端服务器的内容压缩后传输给client端).缓存的作用:减少冗余内 ...
- django中admin路由系统工作原理
一.如图所示 from django.contrib import admin from . import models class zhangsan(admin.ModelAdmin): list_ ...
- Charles安装与使用
Charles是在 Mac 下常用的网络封包截取工具,在做 移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析. Charles 通过将自己设置成系统的网络访问代理服务器,使 ...