这真的是披着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[5010];
int main()
{int n,i,sum=0;scanf("%s",s); n=strlen(s);for(i=0;i<n;i++)if(s[i]=='0')sum++;int flag=0;if(sum==2||n-sum==2||(s[0]==s[1]&&s[1]!=s[2]))flag=1;for(i=3;i<=n;i++)if(s[i-3]!=s[i-2]&&s[i-2]==s[i-1]&&s[i-1]!=s[i])flag=1;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=1000000007;
int n,m;
struct data{int x,id;
}a[2010];
int b[1010],rank[2010],c[2010],f[1010][2010];
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=0;for(;x;x-=low(x))sum=(sum+c[x])%mod;return sum;}
int main()
{int i,j;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)scanf("%d",&a[i].x),a[i].id=i;for(i=1;i<=m;i++)scanf("%d",&b[i]);sort(a+1,a+n+1,cmp);for(i=1;i<=n;i++)rank[a[i].id]=i;for(i=1;i<=n;i++)f[1][i]=1;for(i=2;i<=m;i++){for(j=1;j<=n;j++)c[j]=0;for(j=1;j<=n;j++){int l=0,r=n+1;while(l+1<r){int mid=(l+r)>>1;if(a[mid].x>b[i]-b[i-1]+a[rank[j]].x)r=mid;else l=mid;}f[i][j]=work(l); add(rank[j],f[i-1][j]);}}int ans=0;for(i=1;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[100010],to[600010],w[600010],ne[600010];
int dist[100010],q[5000010],inq[100010];
int a[10010];
int n,m,k,tot=0;
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=1,t=0;for(i=1;i<=n;i++)dist[i]=1<<30,inq[i]=0;for(i=1;i<=k;i++)if(i&(1<<p))q[++t]=a[i],dist[a[i]]=0,inq[a[i]]=1;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]]=1;}}inq[q[h++]]=0; }int ans=1<<30;for(i=1;i<=k;i++)if(!(i&(1<<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=1;i<=k;i++)scanf("%d",&a[i]);for(i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z); add(x,y,z); add(y,x,z);}int ans=1<<30;for(i=0;i<=log(k);i++)ans=min(ans,spfa(i));printf("%d",ans);
}

C

转载于:https://www.cnblogs.com/quzhizhou/p/7246124.html

暑假爆零欢乐赛SRM08题解相关推荐

  1. BNUZ-ACM 2018国庆新生欢乐赛部分题解+思路(已解出答案部分)

    由于时间不足,本人在新生赛仅浏览了四题,其中两题完全通过. 下面是已解出的一题,供比对和取优. A. 三角恋 下面贴上原题: 我的思路: 首先需要一个while(scanf)循环,以供测试器循环测试各 ...

  2. 2019BNUZ_ACM国庆欢乐赛题解

    目录 题目来源 : A.小沛的暑假安排 B.nsy上幼儿园 C.nsy上小学 D.怡姐的游戏 E.如风般奔跑 F.cjb找朋友 G. 黑魔仙wgc的攻击 H. 皓洲喜欢经纬线 I. 小枫买车 J. 单 ...

  3. 北师大珠海分校2017国庆欢乐赛题解

    我都老了还让我写这种题解. 约翰·洛吉·贝尔德 每次开k个电视,需要这k个电视的色彩都不一样 每种色彩需要一根信号源 现在问至少需要多少种信号源 那么我们可以找k个电视.他们都只用1个信号源,有不同颜 ...

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

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

  5. 【题解】Comet OJ 夏季欢乐赛(2019)A 完全k叉树⭐⭐ 【思维】

    Comet OJ 夏季欢乐赛(2019)A 完全k叉树⭐⭐ 欢迎报考JWJU!这里有丰富的社团活动,比如为梦想奋斗的ACM集训队,经常组织飞行棋的桌游协会,喜欢"唱,跳,rap,篮球&quo ...

  6. 10.23爆零了竟然还能写题解??

    10.23爆零题解 T1超级大水题,结果忘了输出"\n",爆零: T2网络流+二分,结果忘了memcpy(),爆零: T3,嗯,不会. T1. LMY与LYM 问题描述: LMY与 ...

  7. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)比赛总结

    CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)比赛总结 总结: ​ 这场比赛不太顺心,B,I水题 10分钟内A了.A题推公式用double写卡了1个小时,换成其他暴力 ...

  8. CometOJ欢乐赛总结

    今天下午尝试了下CometOJ的欢乐赛,好吧,是对那些大佬来说是欢乐赛,其中出了9道题,5个小时,我只A了2道,其中有三道都是超时,所以最后也没做出了,关于题目,比赛完只搞定了其中5题,觉得是自己比赛 ...

  9. CTSAPIO2019爆零记

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

最新文章

  1. python 画三维函数图-Python画三维图-----插值平滑数据
  2. Python数据相关系数矩阵和热力图轻松实现
  3. 解决requests-SSL: CERTIFICATE_VERIFY_FAILED]问题
  4. 美观又实用,10 款强大的开源 Javascript 图表库
  5. R(Kmeans绘制地形图)
  6. 铁大自动选课工具使用说明
  7. BTA分论坛现场直击 | 区块链行业应用有待落地,游戏上链冰火两重天
  8. 基于Docker搭建RabbitMQ集群(多台服务器)
  9. 服务器拒绝mac访问共享文件,Mac怎样访问局域网共享文件
  10. 基于Esp8266的远程开机棒设计和实现
  11. 为什么要做数据分析?数据分析给企业带来了什么?
  12. Hello New World 写在 Conflux 网络 Tethys 上线之际
  13. 图形学(3)光栅图形学的直线绘制(下)
  14. 计算机教案三年级冀教版,冀教版小学三年级信息技术教案lbrack;画美丽的早晨rsqb;...
  15. 中国对世界主要经济体直接投资概况分析:对中国香港、东盟、欧盟投资流量分别是891.46亿美元、160.63亿美元、100.99亿美元[图]
  16. 巴萨“青梅竹马”力量震惊世界 梅西小法19球占79.2%
  17. 利用Smith圆图设计匹配网络
  18. 韩国外交部:官网因萨德间歇性遭来自中国黑客攻击
  19. 用友nc系统无法连接到服务器,用友U8其他登陆时提示“系统错误无法连接服务器”...
  20. 【Unity3D】解决LitJson序列化中文不能正常显示的问题

热门文章

  1. 基于Vue+nodejs实现的前后端分离疫情防控系统
  2. 基于SSH实现的学生成绩管理系统
  3. 距离和相似性度量方法
  4. Windows中几个内存相当的指标
  5. 单例模式 之 单例模式——懒汉模式
  6. BZOJ2653 middle 【主席树】【二分】*
  7. Linux系统安装gcc/g++详细过程
  8. python使用正則表達式
  9. TinyXml高速入口(一)
  10. C#委托与事件 简明