享受爆零的快感

老叶本来是让初三的打的,然后我SB的去凑热闹了

TM的T2写炸了(去你妹的优化),T1连-1的分都忘记判了,T3理所当然的不会

光荣革命啊!

T1

思维图论题,CHJ dalao给出了正解但-1输成0了缅怀

而且这题不能用读优玄学

思路也很新奇,先跑一遍MST,判断是否有无解的情况

然后看一下MST中与1相连的边有几条

如果小于k那么我们把所有与1相连的边减上一个值使它们优先被选,然后跑MST

大于k就加上去即可

注意到这个值可以二分,因此不停做MST即可

CODE

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5005,M=100005;
const double EPS=1e-5;
struct data
{
int l,r,s;
double add;
}a[M];
int n,m,k,cnt,father[N],tot;
long long ans;
inline bool comp(data a,data b)
{
return a.s+a.add<b.s+b.add;
}
inline int getfather(int k)
{
return father[k]==k?k:father[k]=getfather(father[k]);
}
inline int MST(double x)
{
register int i; int res=0,tot=0;
for (i=1;i<=m;++i)
if (a[i].l==1||a[i].r==1) a[i].add=x;
sort(a+1,a+m+1,comp);
for (i=1;i<=n;++i)
father[i]=i; ans=0;
for (i=1;i<=m;++i)
{
int fx=getfather(a[i].l),fy=getfather(a[i].r);
if (fx!=fy)
{
if (a[i].l==1||a[i].r==1) ++res;
ans+=a[i].s; ++tot;
father[fx]=fy;
}
}
if (tot!=n-1) return -1;
return res;
}
int main()
{
freopen("path.in","r",stdin); freopen("path.out","w",stdout);
register int i;
scanf("%d%d%d",&n,&m,&k);
for (i=1;i<=m;++i)
{
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].s);
if (a[i].l==1||a[i].r==1) ++tot;
}
if (tot<k||MST(0)==-1) { puts("-1"); return 0; }
double l=-100000.0,r=100000.0;
while (r-l>EPS)
{
double mid=(l+r)/2.0;
int t=MST(mid);
if (t==k) { printf("%lld",ans); break; }
if (t>k) l=mid; else r=mid;
}
return 0;
}

T2

这么小的数据范围,就是套路的状压DP

只有我一个人想到记忆化搜索暴力玄学搜索么

好吧又是我ZZ了

首先发现n的范围只有15,果断状压成01串表示第几个串选或不选

而后预处理一个数组g[i][j]表示当t[i]上的字符为j时,与其它串的匹配情况(用二进制下压缩01串表示)

例如,四个串为

?a?

ab?

aa?

??b

例如

  • g[2]['a']=1101(与第四个,第三个,第一个串分别匹配)=13

  • g[1]['a']=1111=15

然后我们设DP数组f[i][j]表示匹配到第i位时(第i位尚未匹配)所有串的匹配情况为j(二进制下的01串)时方案总数

则有f[i][j]可以转移出

f[i+1][j&g[i][ch]]+=f[i][j]('a'<=ch<='z')

因为这里只要一个位置不匹配那就整个串都不匹配,因此只有两边都是1才满足要求

最后ans+=所有j的1的个数恰好为k个的f[len+1][j]

C++没有以字符为下标的数组,因此所有字符减去'a'即可

CODE

#include<cstdio>
#include<cstring>
using namespace std;
const int N=20,D=50,mod=1000003;
int g[D+5][30],f[D+5][(1<<N+1)+5],n,k,ans,t;
char s[N][55],ch;
inline int count(int x)
{
int tot=0;
while (x) tot+=x&1,x>>=1;
return tot;
}
int main()
{
freopen("question.in","r",stdin); freopen("question.out","w",stdout);
register int i,j; scanf("%d",&t);
while (t--)
{
memset(f,0,sizeof(f));
memset(g,0,sizeof(g));
scanf("%d%d",&n,&k);
for (i=1;i<=n;++i)
scanf("%s",s[i]+1); int len=strlen(s[1]+1);
for (i=1;i<=len;++i)
for (ch='a';ch<='z';++ch)
for (j=1;j<=n;++j)
if (s[j][i]=='?'||ch==s[j][i]) g[i][ch-'a']|=1<<j-1;
f[1][(1<<n)-1]=1; ans=0;
for (i=1;i<=len;++i)
for (j=0;j<1<<n;++j)
if (f[i][j]) for (ch='a';ch<='z';++ch)
f[i+1][j&g[i][ch-'a']]=(f[i+1][j&g[i][ch-'a']]+f[i][j])%mod;
for (i=0;i<1<<n;++i)
if (count(i)==k) ans=(ans+f[len+1][i])%mod;
printf("%d\n",ans);
}
return 0;
}

T3

这就是传说中的神题么

暴力的想法都是有的,但是就是刚不出来(只有YZC dalao拿了2分)

标算是DP+KMP+矩阵乘法(快速幂),还是不可食用的

想要标算的同学看BZOJ1009黄学长题解

EZ 2018 05 06 NOIP2018 慈溪中学集训队互测(五)的更多相关文章

  1. EZ 2018 05 26 NOIP2018 模拟赛(十六)

    这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...

  2. EZ 2018 05 20 NOIP2018 模拟赛(十五)

    这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...

  3. EZ 2018 05 13 NOIP2018 模拟赛(十三)

    这次的比赛真心水,考时估分240,然后各种悠闲乱逛 然后测完T1数组开小了炸成40,T2,T3都没开long long,T2炸成20,T3爆0 掉回1600+的深渊,但是还有CJJ dalao比我更惨 ...

  4. EZ 2018 05 04 NOIP2018 模拟赛(十二)

    这次的试卷应该是激励我们一下的,链接 然后大家的分数就都很高,然后我就210被一群秒A T2的240大佬爆踩 掉了5rating但Rank竟然发杀了 X_o_r dalao && YZ ...

  5. EZ 2018 05 01 NOIP2018 模拟赛(十一)

    莫名其妙暴涨Rating 其实题目都挺好挺简单的,但是越简单就越容易ZZ 不理解问什么第一题这么多人找环 不过T2是真心细节题,T3太难了 题目戳这里 T1 仔细分析题意发现那个交换规则就是废话,如果 ...

  6. EZ 2018 04 06 NOIP2018 模拟赛(七)

    我是链接 这次是真的惨,码了将近2hours的可持久化线段树炸掉了! 而且本地拍了一万年也没发现哪里炸了. T1 压位的入门题,话说这道题能拿个99分就可以了(100分要FFT) 对于暴力,就是暴力找 ...

  7. 【loj2461】【2018集训队互测Day 1】完美的队列

    #2461. 「2018 集训队互测 Day 1」完美的队列 传送门: https://loj.ac/problem/2461 题解: 直接做可能一次操作加入队列同时会弹出很多数字,无法维护:一个操作 ...

  8. 【2018集训队互测】【XSY3372】取石子

    题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在 ...

  9. EZ 2018 07 06 NOIP模拟赛

    又是慈溪那边给的题目,这次终于没有像上次那样尴尬了, T1拿到了较高的暴力分,T2没写炸,然后T3写了一个优雅的暴力就203pts,Rank3了. 听说其它学校的分数普遍100+,那我们学校还不是强到 ...

随机推荐

  1. SpringMVC在Controller层中注入request的坑

    记一次为了节省代码没有在方法体中声明HttpServletRequest,而用autowire直接注入所钻的坑 结论 给心急的人. 直接在Controller的成员变量上使用@Autowire声明Ht ...

  2. python 版本升级

    python 版本升级 升级python 查看python的版本 python -V Python 2.6.6 下载新版本 wget https://www.python.org/ftp/python ...

  3. 学习vue.js的正确姿势(转载)

    最近饶有兴致的又把最新版 Vue.js 的源码学习了一下,觉得真心不错,个人觉得 Vue.js 的代码非常之优雅而且精辟,作者本身可能无 (bu) 意 (xie) 提及这些.那么,就让我来吧:) 程序 ...

  4. Node.js+Ajax实现物流小工具

    半年过去了,好像什么也没干,好像什么也干了. 最近在网易云课堂上看到了这个课程,觉得很有意思,就跟着课程做了一遍,课程地址:http://study.163.com/course/courseMain ...

  5. SQLSERVER中的鬼影索引

    SQLSERVER中的鬼影索引 看这篇文章之前可以先看一下鬼影记录 了解了解一下SQLSERVER里的鬼影记录关于鬼影记录的翻译一关于鬼影记录的翻译二 当删除表中的某一条记录的时候,索引页面的对应记录 ...

  6. 使用托管快照创建作为 Azure 托管磁盘存储的 VHD 的副本

    创建快照 创建 OS 或数据磁盘 VHD 的快照,以便将其用作备份或用于排查 VM 问题. 快照是 VHD 的完整只读副本. 使用 Azure 门户创建快照 登录到 Azure 门户. 首先在左上角单 ...

  7. angular、jquery、vue 的区别与联系

    angular和jquery的区别 angular中是尽量避免操作DOM, angular是基于数据驱动, 适合做数据操作比较繁琐的项目,angular适用于单页面开发,是一个比较完善的mvvm框架, ...

  8. 设置联想键盘恢复F1~F12默认按键的操作办法

    背景 默认都是笔记本键盘才有Fn组合功能键,台式机很少有.今天领到的是联想键盘,给我的台式机使用后F12很麻烦,必须Fn+F12才可以. 需求 恢复默认的F1~F12功能 方案 只需要下载驱动安装: ...

  9. Git——新手入门与上传项目到远程仓库GitHub(转)

    Git概述 什么是Git? 刚开始对这个东西也感到挺迷茫,并且问了好多已经学习android一段时间的同学也是一头雾水,直到了解并使用之后,才体会到Git的好处以及重要意义. Git:是目前世界上最先 ...

  10. trufflesuite/truffle-hdwallet-provider

    https://github.com/trufflesuite/truffle-hdwallet-provider/blob/master/index.js 实现代码 truffle-hdwallet ...