这真的是披着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. Linux之(tomcat)服务之服务调优

    Tomcat调优原则: ● 增加连接数 ● 调整工作模式 ● 启用gzip压缩 ● 调整JVM内存大小 ● 作为web服务器时,与Apache或者Nginx整合 ● 合理选择垃圾回收算法 ● 尽量使用 ...

  2. 针对中科院java接口的用法和问题

    1.下载附加的中科院分词工具包(要下载的到我的博客里面免费下载就可以) 2.解压后会看到例如以下几个目录 3.把java工程导入eclipse中.点击import.再选择existing projec ...

  3. 十六进制字符串 char 数组 转换 c/c++/java

    转载自:http://qing.blog.sina.com.cn/1820422183/6c81702733001qvk.html 1.c版 int hexcharToInt(char c) {    ...

  4. 《从零开始学Swift》学习笔记(Day 15)——请注意数字类型之间的转换

    原创文章,欢迎转载.转载请注明:关东升的博客 在C.Objective-C和Java等其他语言中,整型之间有两种转换方法: 从小范围数到大范围数转换是自动的: 从大范围数到小范围数需要强制类型转换,有 ...

  5. 好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674

    Git commits历史是如何做到如此清爽的? - 知乎 https://www.zhihu.com/question/61283395/answer/186122300 尤雨溪 前端开发.Java ...

  6. C++常备知识总结

    1.extern表示是外部函数或外部变量,比如: 1.extern void add(int x,inty);表示该函数主体不在当前模块中,在另一个模块中(文件)2.extern int total; ...

  7. iOS 多线程之 GCD 的基本使用

    什么是GCD 全称Grand Central Dispatch 中暑调度器 纯C语言 提供了很多强大的函数 GCD 的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU ...

  8. echarts系列之动态加载数据

    1.echarts学习前言 最近接触到echarts,发现数据可视化真的是魅力无穷啊,各种变幻的曲线交错,以及‘曼妙’的动画效果真是让人如痴如醉! 下面就来一起欣赏她的美... “ ECharts是中 ...

  9. python3爬虫-分析Ajax,抓取今日头条街拍美图

    # coding=utf-8 from urllib.parse import urlencode import requests from requests.exceptions import Re ...

  10. springboot整合Ehcache

    首先引入maven包: <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...