这真的是披着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题解的更多相关文章

  1. 【题解】Comet OJ 国庆欢乐赛 简要题解

    [题解]Comet OJ 国庆欢乐赛 简要题解 A 直接做 B 直接做,结论: \[ ans=\max([Max\ge \mathrm{sum}] Max,s[n]/2) \] C 考虑这样一个做法: ...

  2. Comet OJ 2019 夏季欢乐赛题解

    Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...

  3. 爆零后的感受外加一道强联通分量HDU 4635的题解

    今天又爆零了,又是又,怎么又是又,爆零爆多了,又也就经常挂嘴边了,看到这句话,你一定很想说一句””,弱菜被骂傻,也很正常啦. 如果你不开心,可以考虑往下看. 翻到E(HDU 4635 Strongly ...

  4. ContestHunter暑假欢乐赛 SRM 05

    T1 组合数,求一下乘法逆元就行了 没取模 没1LL* 爆零了 T2 让最大子段和最小就行,跑最大子段和的时候若超过S就弹出堆中最大的数,每次有负数加进来不断弹出最小的数相加重新加进堆直到为正数,因为 ...

  5. CSP-S 2021 爆零记

    前言 本人今年高二蒟蒻OIer,高一刚刚接触OI. 感觉可能要直接退役了555~ 希望还有机会靠NOIP翻盘 Day - 暑假 为了备战CSP提前返校,与xzh一起划水,总之刷了不少题,我也大受震撼 ...

  6. 雅礼集训1-9day爆零记

    雅礼集训1-9day爆零记 先膜一下虐爆我的JEFF巨佬 Day0 我也不知道我要去干嘛,就不想搞文化科 (文化太辣鸡了.jpg) 听李总说可以去看(羡慕)各路大佬谈笑风声,我就报一个名吧,没想到还真 ...

  7. CTS&&APIO2019爆零记

    如果你只好奇测试相关请跳至day 2 day 3 day 6 scoi 2019 之后 ​ 由于实力问题,省选的时候排名在三十多,显然是没有进队.不过可能是受过的打击比较多,所以还没有特别颓废,甚至连 ...

  8. NOIp 0916 爆零记

    题目来自神犇chad 上次爆零是说着玩,这次真的爆零了QAQ 好吧貌似是TYVJ的模拟赛打多了..一直按照TYVJ的格式提交的压缩包.. 然后莫名其妙就AK了hhh 来的时候迟到了半小时,昨晚痛苦的补 ...

  9. gdoi2017爆零记

    前言 这次gdoi,用三个词来形容我:爆零+爆零+爆零.本来还希望能在gdoi搞个小新闻(拿个一等什么的). Day0 这次gdoi是在东莞东华中学,坐个动车下午3点多就到了,然后打个滴滴去酒店(本来 ...

随机推荐

  1. HDU3062-Party(2-SAT)

    pid=3062">题目链接 思路:2-SAT的模版题 代码: #include <iostream> #include <cstdio> #include & ...

  2. web容器 web服务器 servlet/jsp容器 之间的区别和关系是什么?

    web容器 web服务器 servlet/jsp容器 之间的区别和关系是什么? 这是我在网上找的一些资料:1. Web浏览器除了可以在本地硬盘上打开网页文档外,还可以使用http网络协议从网络上的We ...

  3. Flow Problem(最大流模板)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  4. Linux 入门介绍

    背景:最近在搞redis 集群  ,然后有时候会怀疑自己,那么问题来了, 怀疑自己就是自己不扎实!  记忆不好了!  写下来备份吧! 才入门时候总是会想 ,Linux 下面文件夹都是什么意思! bin ...

  5. 计算属性 vs 侦听属性 当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的

    https://cn.vuejs.org/v2/guide/computed.html#基础例子 计算属性 vs 侦听属性 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属 ...

  6. 为什么要提倡"Design Pattern"呢? 开闭原则 系统设计时,注意对扩展开放,对修改闭合。

    [亲身经历] 无规矩不成方圆 设计模式 - 搜狗百科 https://baike.sogou.com/v123729.htm?fromTitle=设计模式 为什么要提倡"Design Pat ...

  7. yum命令的实例

    1) 自定义yum仓库:createrepo 2) 自定义repo文件 3) 使用yum命令安装httpd软件包(在这里需要强调一点,本身执行yum.repos.d时,文件里面是有自带的yum源的,需 ...

  8. Hadoop “Name node is in safe mode” 错误解决方法

    Hadoop 解除 "Name node is in safe mode" 运行hadoop程序时,有时候会报以下错误:org.apache.hadoop.dfs.SafeMode ...

  9. br_netfilter 模块开机自动方法

    环境 cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 在/etc/sysctl.conf中添加: net.bridge.bri ...

  10. spring 登录提示 Bad credentials

    spring 日志输出:Authentication failed: password does not match stored value in spring security 3.2,检查密码发 ...