细节。。。决定成败

T2数组开小,T3long long没开够。

而且其实不止这样,考试结束前15分钟发现了好多低错:

T3双向边没开2倍。dfs没递归调用。T2为了调试bitset开20没改(后来改成了6000,虽说还是错的但是还是好了不少)

一定要手模几个样例测一下。严格注意数组大小

最后几天了,一定要注意这种细节了。

T1:Adore

状压,dp。

复杂度$O(mk \times 2^k)$不够优但是足以通过。

 #include<cstdio>
int add(int &a,int b){a+=b;if(a>=)a-=;}
int cntbit[],m,k,dp[][],E[],NE[],ans;
int re(){register char ch=getchar();
while(ch<''||ch>'')ch=getchar();
return ch-'';
}
int main(){
freopen("adore.in","r",stdin);freopen("adore.out","w",stdout);
for(int i=;i<;++i)cntbit[i]=cntbit[i^i&-i]+;
scanf("%d%d",&m,&k);m-=;
int st=,ths=,nxt=;
for(int i=;i<k;++i)st|=re()<<i;
dp[nxt][st]=;
while(m--){
ths^=;nxt^=;
for(int i=;i<<<k;++i)dp[nxt][i]=;
for(int i=;i<k;++i)E[i]=NE[i]=;
for(int i=;i<k;++i)for(int j=,x;j<k;++j)x=re(),E[i]|=x<<j,NE[j]|=x<<i;
for(int s=;s<<<k;++s)if(dp[ths][s]){
int tst=,ntst=;
for(int i=;i<k;++i)if(s&<<i)tst^=E[i],ntst^=NE[i];
add(dp[nxt][tst],dp[ths][s]);add(dp[nxt][ntst],dp[ths][s]);
}
}st=;
for(int i=;i<k;++i)st|=re()<<i;
for(int i=;i<<<k;++i)if(!(cntbit[st&i]&))add(ans,dp[nxt][i]);
printf("%d\n",ans);
}

T2:Confess

手动构造,发现交集大于n的很多。所以采用随机化。注意数组大小。

 #include<bits/stdc++.h>
using namespace std;
bitset<>B[];
int n,k;char s[];
int main(){
freopen("confess.in","r",stdin);freopen("confess.out","w",stdout);
scanf("%d%s",&n,s);
while(s[k])k++;
int cnt=;
for(int i=;i<k;++i){
int x=s[i]-;
for(int j=;j<&&cnt<=n<<;++j)B[][cnt]=(x&<<j?:),cnt++;
}
for(int I=;I<=n+;++I){
scanf("%s",s);
int cnt=;
for(int i=;i<k;++i){
int x=s[i]-;
for(int j=;j<&&cnt<=n<<;++j)B[I][cnt]=(x&<<j?:),cnt++;
}
}
srand(time());
while(){
int a=rand()%(n+)+,b=rand()%(n+)+;
while(a==b)b=rand()%(n+)+;
if((B[a]&B[b]).count()>=n>>)return printf("%d %d\n",a,b),;
}
}

T3:Repulsed

设dp[i][j]表示距离i这个点j条边的需要灭火器的子节点有多少个。Idp[i][j]表示距离i点有j条边的还没用完的灭火器还能用几次。

在一棵子树内,互相消除,然后上传。

如果有的点dp[i][k]>0而Idp[i][0]=0那么就需要申请新的灭火器。

从远到近依次解决需求,不断上传。最后在1号节点特殊处理:不管剩下多少需求都要直接申请灭火器解决。

注意Idp数组需要开longlong。

 #include<bits/stdc++.h>
using namespace std;
int n,k,s,fir[],l[],to[],ec,ans,dp[][];long long Idp[][];
void link(int a,int b){l[++ec]=fir[a];fir[a]=ec;to[ec]=b;}
void dfs(int p,int fa){
dp[p][]++;
for(int i=fir[p];i;i=l[i])if(to[i]!=fa){
dfs(to[i],p);
for(int j=;j<k;++j)dp[p][j+]+=dp[to[i]][j],Idp[p][j+]+=Idp[to[i]][j];
}
while(dp[p][k]>Idp[p][])Idp[p][]+=s,ans++;
for(int i=k;~i;--i)for(int j=k-i;~j;--j){
int x=min(1ll*dp[p][i],Idp[p][j]);
dp[p][i]-=x;Idp[p][j]-=x;
}
if(p==){
int totcnt=;
for(int i=;i<=k;++i)totcnt+=dp[p][i];
while(totcnt>)totcnt-=s,ans++;
}
}
int main(){
freopen("repulsed.in","r",stdin);freopen("repulsed.out","w",stdout);
scanf("%d%d%d",&n,&s,&k);if(s>n)s=n;
for(int i=,a,b;i<n;++i)scanf("%d%d",&a,&b),link(a,b),link(b,a);
dfs(,);printf("%d\n",ans);
}

这是错的!!!

上述算法稍伪。当且仅当需求距离和灭火器距离加和为k或k-1时才会配对,否则就可以上传,以后再匹配。

上传答案一定不会变差,反而可能找到更优的匹配。

要注意根节点就可以随意匹配了。

代码基本没有变。同时时间复杂度也下降到了$O(nk)$

 #include<bits/stdc++.h>
using namespace std;
int n,k,s,fir[],l[],to[],ec,ans,dp[][];long long Idp[][];
void link(int a,int b){l[++ec]=fir[a];fir[a]=ec;to[ec]=b;}
void dfs(int p,int fa){
dp[p][]++;
for(int i=fir[p];i;i=l[i])if(to[i]!=fa){
dfs(to[i],p);
for(int j=;j<k;++j)dp[p][j+]+=dp[to[i]][j],Idp[p][j+]+=Idp[to[i]][j];
}
while(dp[p][k]>Idp[p][])Idp[p][]+=s,ans++;
for(int i=k;i>=((p==)?:k-);--i)for(int j=i;~j;--j){
int x=min(1ll*dp[p][j],Idp[p][i-j]);
dp[p][j]-=x;Idp[p][i-j]-=x;
}
if(p==){
int totcnt=;
for(int i=;i<=k;++i)totcnt+=dp[p][i];
while(totcnt>)totcnt-=s,ans++;
}
}
int main(){
scanf("%d%d%d",&n,&s,&k);
for(int i=,a,b;i<n;++i)scanf("%d%d",&a,&b),link(a,b),link(b,a);
dfs(,);printf("%d\n",ans);
}

真正的AC代码

自家OJ数据水了,去BZOJ1117自测吧。(送个链接)

[考试反思]1110csp-s模拟测试109:细节的更多相关文章

  1. [考试反思]0718 NOIP模拟测试5

    最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...

  2. [考试反思]0814NOIP模拟测试21

    前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...

  3. [考试反思]0909csp-s模拟测试41:反典

    说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...

  4. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  5. [考试反思]0816NOIP模拟测试23

    210 210 210 170 还可以.暴力打满就rk4了? 但不管怎么说,总算是在改完题之后理直气壮的写考试反思了. T1是个dp,说水也不太水.(当然某脸只要A掉了一道题就要说那是水题) 我的思路 ...

  6. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  7. [考试反思]0725NOIP模拟测试8

    看清你是个什么东西了么? 现在看清了么?rank#15?垃圾玩意? 你什么也不是.你没有骄傲,偷懒的资格! 节节败退,永无止境,你想掉到什么样子? 你还在为了成功拿到送分的T1而沾沾自喜?只不过是勉强 ...

  8. [考试反思]0714/0716,NOIP模拟测试3/4

    这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...

  9. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

随机推荐

  1. 【玩转SpringBoot】配置文件yml的正确打开姿势

    序言 在很久以前,Spring的配置文件是基于XML的.它的名字就是applicationContext.xml,没错,就只有这一个xml文件. 它里面配置了所有的东西.但是数据库信息通常会单独拿出来 ...

  2. 【Spring】只想用一篇文章记录@Value的使用,不想再找其它了(附思维导图)

    1 简介 不得不说,Spring为大家提供许多开箱即用的功能,@Value就是一个极其常用的功能,它能将配置信息注入到bean中去.即使是一个简单的功能,Spring也提供了丰富的注入类型和形式.我经 ...

  3. python错误处理—try…catch…finally、调用栈分析

    高级语言包括python一般都内置了一套try…catch…finally的错误处理机制: >>> try: ... print('try...') ... r = 10 / 0 . ...

  4. monkey命令解析详解

      我面试时遇到过几次让背个monkey命令的,可以这样简单说一个:adb shell monkey -p(约束包名) -s 200 -v -v --throttle 300 1500000 > ...

  5. H5和ionic RN和Weex 他们之间的比较

    使用H5和ionic 进行移动APp开发 首先要开发一个完整的网站,然后,在网站的基础上,使用 H5+huozhe ionic提供的打包技术,把网站打包成一个应用. 把网站打包成一个可以安装到手机上运 ...

  6. asp.net core 3.0获取web应用的根目录

    目录 1.需求 2.解决方案 1.需求 asp.net core 3.0的web项目中,在controller中,想要获取wwwroot下的imgs/banners文件夹下的所有文件: 在传统的asp ...

  7. Linux ipv6 无状态 设置为 eui64

    Linux ipv6 无状态 设置为 eui64 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-08-22. 无状态的ipv6有eui64和stable-privacy模式, 在家 ...

  8. C#扩展方法学习笔记

    C#扩展方法,简单的理解是不修改原来类的源代码的情况下,为某个类添加某个方法.扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的.它们的第一个参数指定该方法作用于哪个类型,并且该参数以 th ...

  9. 团队项目之测试与发布(Alpha版本)

    小组:BLACK PANDA 时间:2019.12.05 测试报告 1.测试找出的BUG 图片上传,文件过大会出错 用户可访问不具权限的URL 空字段导致异常 serializable反序列化时版本不 ...

  10. 提速企业应用开发,Ntaub 3极速开发平台发布

    企业管理系统搞了这么多年,还是以表单.数据增删改这些功能为主.唯一的变化就是“变化”,企业的业务模式和流程越来越多样化,开发需求变更越来越频繁,开发周期却要求越来越短. 无代码.低代码开发平台开始流行 ...