细节。。。决定成败

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. 350. 两个数组的交集 II

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...

  2. git下载问题

    官网下载:打不开,可用git for Windows 下载 地址:https://github.com/git-for-windows/git/releases

  3. Electron node integration enabled 设置

    解决办法 参考博客:https://blog.csdn.net/hwytree/article/details/103167175

  4. 【Maven】聚合

    [Maven]聚合 转载: 使用聚合一次能为多个 maven 项目执行命令,而不用到每一个项目下去执行命令. 聚合 pom 的特殊之处 1.packaging 配置 pom <packaging ...

  5. Caffe源码-Net类(下)

    net.cpp部分源码 // 接着上一篇博客的介绍,此部分为Net类中前向反向计算函数,以及一些与HDF5文件或proto文件相互转换的函数. template <typename Dtype& ...

  6. python多线程编程—同步原语入门(锁Lock、信号量(Bounded)Semaphore)

    摘录python核心编程 一般的,多线程代码中,总有一些特定的函数或者代码块不希望(或不应该)被多个线程同时执行(比如两个线程运行的顺序发生变化,就可能造成代码的执行轨迹或者行为不相同,或者产生不一致 ...

  7. tp5.1 无限极分类前台展示

    商城前台的多级分类展示,如图所示,一般是三级.所以代码只组装到第三级. 数据库设计,共5个字段.level字段是方便用来显示级别的.pid是父级分类id,pid等于0说明它是一级分类.path字段,举 ...

  8. 分布式事物 - 基于RPC调用 - 补偿模式

    前提 所有服务均有独立的事物管理机制,相互间没有任何关联. 所有业务接口都有对应的补偿方法,用于将已经更新的数据还原到上一次的状态. 本次实例为同步业务,理想状态下,只有全部成功或全部失败两种情况. ...

  9. Win10系统重做

    一.准备工作: 1.电脑(台式电脑.笔记本电脑): 2.U盘(内存大于4G): 3.软碟通(UltraISO):下载地址:https://pan.baidu.com/s/1tpCiIyIwK_7LaL ...

  10. 剑指offer-39:平衡二叉树

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 解题思路 在做这题是,我第一反应就是遍历两次二叉树.第一遍记录每个节点的深度,并将信息存入HashMap中,key = node,value ...