细节。。。决定成败

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. 《java面试十八式》--引子

    爪哇城中   “喂,你等等我啊”少女气喘吁吁的喊道   “大小姐,你可快点吧,报名马上就要结束了.”   这是爪哇城一年一度的大选比赛,被选上的人会留下来任职,享有名誉和金钱,所以大家都在积极准备. ...

  2. MySQL 05

    目录 事务 基本概念 四大特性(ACID) 使用方法 存储引擎 视图 基本概念 使用方法 触发器 基本概念 使用方法 存储过程 基本概念 使用方法 数据备份 备份 导入 函数 事务 基本概念 事务: ...

  3. 【CSS】357- 坚定地使用 CSS Custom Properties

    自定义属性(Custom Properties)是一个很有魅力的 CSS 新特性,现代浏览器广泛 支持.但是遇到那些不支持 CSS Custom Properties 的老掉牙浏览器我们该怎么办?等着 ...

  4. 【JS】324- JS中的内存管理(中高级前端必备)

    前言 像C语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()用于分配内存和释放内存.而对于JavaScript来说,会在创建变量(对象,字符串等)时分配内存,并且在不再 ...

  5. rails 5 功能新增及改变

    1.ApplicationRecord 在Rails4中所有的模型都继承自ActiveRecord::Base,不过在Rails5中新引进了一个叫ApplicationRecord的类,存放在: ap ...

  6. 【docker】使用学习

    [docker]使用学习 目录 =========================================================== 1.docker 安装 2.mysql 安装 3 ...

  7. 什么是cookie?什么是session?session和cookie有什么区别?

    在技术面试中,经常被问到“说说Cookie和Session的区别”,大家都知道,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果让你更详细地说明,你能说出几点?今天个推君就和大 ...

  8. 《Dotnet9》系列-开源C# WPF控件库1《MaterialDesignInXAML》强力推荐

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  9. 计算机等级考试真题1(JAVA)

    答案: 01-05 C D A A C   06-10 B/D    C C C B 11-15 A C A C A 16-20 C B     C    21-25 D D C D D 26-30 ...

  10. 原生JS实现移动端轮播图

    功能描述: 自动无缝轮播图片,底部小圆点跟图片保持一致:手指左右移动轮播图,移动距离大于50px播放下一张(或上一张),小于50px则回弹 具体功能实现: 1.定时器 自动轮播图片 先声明一个inde ...