细节。。。决定成败

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. Python3 面向对象进阶2

    目录 Classmethod Staticmethod Isinstance Issubclass 反射 概念 hasattr getattr setattr delattr 魔法方法 概念 __ne ...

  2. 【Webpack】373- 一看就懂之 webpack 高级配置与优化

    本文原载于 SegmentFault 社区专栏 前海拾贝 作者:JS_Even_JS 一.打包多页面应用 所谓打包多页面,就是同时打包出多个 html 页面,打包多页面也是使用 html-webpac ...

  3. 01-使用pipenv管理项目环境

    一.使用pipenv管理项目环境 首先为什么我们不在真实环境下做开发呢?真实环境的一些包被其他服务所依赖,我们安装的包和模块都混杂在一起,这样不便于项目管理,还有可能出现意想不到的错误,于是就出现了包 ...

  4. throw和throws有什么区别

    1.Throw用于方法内部,Throws用于方法声明上 2.Throw后跟异常对象,Throws后跟异常类型 3.Throw后只能跟一个异常对象,Throws后可以一次声明多种异常类型 throw关键 ...

  5. linus 命令

    系统信息 arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) h ...

  6. WCF服务部署到IIS

    WCF服务部署 一.将WCF服务部署到IIS上 1.首先检测电脑上是否安装了IIS,一般来说Win7以上系统自带IIS 2.下面进行IIS服务的开启设置:  控制面板=>打开或关闭Windos功 ...

  7. iOS开发集成支付宝支付、支付宝&微信支付

    支付宝支付: 参考链接:https://www.jianshu.com/p/60175e525c0e https://blog.csdn.net/zhonggaorong/article/detail ...

  8. WinCC的电子签名与审计追踪

    如何写入审计追踪记录 用脚本向Audit中添加记录有两种方法,一种方法是用InserAuditEntryNew函数写入,另一种方法是生成属于“操作员输入消息”类型的报警消息,该报警消息会记录到Audi ...

  9. Android组件体系之BroadcastReceiver小结

    1.常见分类    BroadCastReceiver,按注册方式可以分为静态广播接收器和动态广播接收器.    静态广播接收器:不受程序是否启动的约束,当应用程序关闭之后,还是可以接收到广播(一般广 ...

  10. CentOS7中_带sqlite3_CGO的golang程序_交叉编译到arm中

    CentOS7中_带sqlite3_CGO的golang程序_交叉编译到arm中 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-10-28. 编写了个golang程序,用到了这个C ...