[考试反思]1013csp-s模拟测试71:徘徊

分差好大。。。但是从排名上看也许还可以接受?

不算太炸

但是这个还是算了吧。。。

其实状态不是很好。

T1不会,打的搜索,想到一个剪枝但是感觉没什么用,所以没打。

考后打上,85了。。。打上另一个就90了。。。

T3已经想到正解思路了,但是不完善

T2想到正解,但是没有证明它是树形,于是没有打。。。

又说不完,晚上又要考,改善状态。

T1:毛一琛

又是meet in miiddle。又没想到。

其实也就是双向搜索,然后hash_map查状态即可。

打的lower_bound,多了一个log。勉强过了。

 1 #include<cstdio>
 2 #include<vector>
 3 #include<algorithm>
 4 using namespace std;
 5 vector<int>X[1025],Y[1025];
 6 int n,x[22],ans,y[1048577],r;
 7 void sch1(int p,int w,int st){
 8     if(p-1==n>>1){if(w>=0)X[st].push_back(w);return;}
 9     sch1(p+1,w-x[p],st|1<<p-1);sch1(p+1,w,st);sch1(p+1,w+x[p],st|1<<p-1);
10 }
11 void sch2(int p,int w,int st){
12     if(p==n+1){if(w>=0)Y[st].push_back(w);return;}
13     sch2(p+1,w+x[p],st|1<<p-r);sch2(p+1,w,st);sch2(p+1,w-x[p],st|1<<p-r);
14 }
15 int main(){
16     scanf("%d",&n);
17     for(int i=1;i<=n;++i)scanf("%d",&x[i]);r=(n>>1)+1;
18     sch1(1,0,0);sch2(r,0,0);
19     for(int i=0;i<1<<(n>>1);++i)sort(X[i].begin(),X[i].end());
20     for(int i=0;i<1<<n-(n>>1);++i)sort(Y[i].begin(),Y[i].end());
21     for(int i=0;i<1<<(n>>1);++i)for(int j=0;j<1<<n-(n>>1);++j)
22         for(int v=0;v<X[i].size();++v)
23             if(lower_bound(Y[j].begin(),Y[j].end(),X[i][v])!=Y[j].end())
24                 if(*(lower_bound(Y[j].begin(),Y[j].end(),X[i][v]))==X[i][v])
25                     y[i<<n-(n>>1)|j]=1;
26     for(int i=1;i<1<<n;++i)ans+=y[i];//,printf("%d\n",y[i]);
27     printf("%d\n",ans);
28 }

T2:毛二琛

首先这题puts("0")会爆零,所以所有情况都有解。

考虑每一个数移动的方向,那么其实就限制了q序列上某两个相差为1的值的相对位置。

这样的话就是SAO那道题简化到序列上了,dp[i][j]表示考虑到操作i,其相对位置是j,前缀和优化就完事了。

代码倒好说。想到就能写出来。

 1 #include<cstdio>
 2 #define mod 1000000007
 3 inline int Mod(int p){return p>=mod?p-mod:p;}
 4 int p[5005],np[5005],n,dir[5005],dp[5005][5005],sum[5005][5005];//dir=2先i后i-1
 5 int main(){
 6     scanf("%d",&n);
 7     for(int i=1;i<=n;++i)scanf("%d",&p[i]),p[i]++,np[p[i]]=i;
 8     for(int i=1;i<=n;++i)
 9         if(np[i]>i){dir[i]=2;for(int j=i+1;j<p[i];++j)dir[j]=1;}
10         else {dir[i]=1;for(int j=i-1;j>np[i];--j)dir[j]=2;}
11     dp[1][1]=sum[1][1]=1;
12     for(int i=2;i<=n-1;++i){
13         if(dir[i]==2)for(int j=1;j<=i;++j)dp[i][j]=Mod(mod+sum[i-1][i-1]-sum[i-1][j-1]);
14         else for(int j=1;j<=i;++j)dp[i][j]=sum[i-1][j-1];
15         for(int j=1;j<=i;++j)sum[i][j]=Mod(sum[i][j-1]+dp[i][j]);
16     }printf("%d\n",sum[n-1][n-1]);
17 }

T3:毛三琛

二分答案,剪枝,及时跳出。

如果目前的x连目前最优答案都不到,continue。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,k,p,a[10005],ans=1000000000;
 4 int Mod(int x){return x>=p?x-p:x;}
 5 int chk(int w,int xx){
 6     int al=1,f=0;
 7     for(int i=1;i<=n&&al<=k;++i){int x=Mod(xx+a[i]);if(x>w)return 0;if(f+x>w)al++,f=x;else f+=x;}
 8     if(al<=k)return 1;
 9     return 0;
10 }
11 int main(){
12     scanf("%d%d%d",&n,&p,&k);
13     for(int i=1;i<=n;++i)scanf("%d",&a[i]);
14     for(int i=0;i<p;++i){
15         if(!chk(ans,i))continue;
16         register int l=0,r=ans;
17         while(l<r-1)if(chk(l+r>>1,i))r=l+r>>1;else l=(l+r>>1)+1;
18         ans=min(ans,chk(l,i)?l:r);
19     }
20     printf("%d\n",ans);
21 }

原文地址:https://www.cnblogs.com/hzoi-DeepinC/p/11667697.html

时间: 2024-10-06 00:16:00

[考试反思]1013csp-s模拟测试71:徘徊的相关文章

[考试反思]0929csp-s模拟测试55:沦陷

菜得过分. 面对T1的大板子不知所措,然后T2的贪心不小心把排序语句删了... T1这种大模板啊...其实我是觉得我能打出来的,然后先用一个小时码了一个2k. 然后做T2想贪心就出来了.十分钟码完T3暴力之后回T1打对拍瞬间爆炸. 于是又重新打了一个2k,WA0.对拍发现. 然后考试就没几分钟了交暴力走了. 不要打完就跑,记得早点对拍改进思路. T1: 的确是挺裸的线段树.离散化或者权值线段树都可以. 但是考场上两个都打出来都死了. 最后用离散化A的. 1 #include<cstdio> 2

[考试反思]1002csp-s模拟测试56:凌乱

放假回来状态回升??(玩够了-但是稍困) T1打的不完全对,但是过掉了.很快的想到了二分吧喇叭啦.. 然后T2也挺快想出来了但是挂细节没发现,考试快结束的时候才发现出锅了. 改了过来是正解,但是出题人无良卡了线段树强制树状数组,T了一个子任务,卡常到飞起. T3暴力没什么问题. 卡常是一种习惯.要注意题目数据范围观察是否卡常. T1: 所有的决策都是一条一次函数. 分两类,斜率正或斜率非负. 如果第二类的直线里有在T=0时符合要求的,那么答案就是0,所以check(0)一下. 如果非负的直线都在

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

稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使用的话,切记计算内存,一点都不能开大. T1: 直接根号筛,拿map也能过. 遍历map直接begin和end啊... 1 #include<cstdio> 2 int Cnt[202]; 3 struct hash_map{ 4 int cnt,fir[10000020],l[6666666],

[考试反思]0114省选模拟7:迷离

这次考得相对不错,但是没什么水准. 只不过记得T1这道原题而已.虽说我忘了怎么做,而且数据范围不一样...差不多是从头想的. 但是并没有AC,像个弱智一样,有两个细节写的完全不对还有80分运气也是真好. 其实挂了不止两个细节...以为是原题于是上来就写20分钟写完,然后过一会出一个锅... 然后看T2,感觉$O(nk^2)$也许差不多?常数很大...但也不会别的.挺好想但是不是很好写. 于是乎强烈谴责cbx没素质暴力水题考后还不改正解的无脸行径 于是就开始写,写了一个半小时. 看T3,绝对大神题

模拟测试68,69

68: 32 AlpaCa 41 03:08:20 31 02:46:16 30 02:46:28 102 03:08:20 69: 28 AlpaCa 20 02:51:15 60 03:05:32 0 01:39:45 80 03:05:32 彻底挂掉了呢. 不过也还好吧,至少之后的考试不会有那么大压力了吧(出第一机房是肯定的事了),那利用之后几场考试就调整好状态,下次再来嘛. 但是最近炸了那么多场还是要反思一下,其实不只是心态的问题,自身实力,考试技巧,时间分配等方面好像都有点问题. 69

微信在线信息模拟测试工具(基于Senparc.Weixin.MP)

目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具在线DEMO:http://weixin.senparc.com/SimulateTool Senparc.Weixin.MP是一个开源的微信SDK项目,地址:https://github.com/JeffreySu/WeiXinMPSDK (其中https://github.com/Jeffrey

2016年上半年软考真题在线模拟测试,提前知晓你的成绩

2016年上半年软考于5月21日结束了,考试完想知道结果的急切心理,几乎每个经历过上学时代的人都能深刻体验到.如果你想知道你考的怎么样,如果你想要提前知道你的成绩,如果你想知道你哪个地方出错了,如果你想知道你哪个地方知识掌握的不够想要更深入的去理解,那就来希赛软考学院吧!希赛软考学院提供2016年上半年软考真题在线模拟测试,有标准的参考答案,有专业老师的解析视频,让你提前知晓你的成绩,让你再次巩固学习. 希赛授课专家介绍 张友生,计算机应用技术博士,软考培训教程系列丛书主编,考试指定教材<系统分

noip模拟测试11

T1:string 第一眼秒出思路,这不就是排序那道题的加强版吗? 然而歪?解复杂度虽然是对的,但常数过大,竟被卡到70 歪?解:(实际上std写的就是这个,但据说std被卡掉了 OAO) 因为字符集很小,所以我们可以把区间排序改为区间查询和覆盖 即:先查询区间内所有字符的个数,再从左端点开始按照大小关系依次将长度为字符个数的区间修改为该字符. 期望复杂度O ( 26*mlogn ),实际复杂度O ( 26*mlogn*(巨大的常数) ) 所以需要一(feng)定(kuang)的卡常 正?解:

模拟测试(vj)

做这份模拟测试,已经崩溃了,英文看不懂,题意理解错.到结束了只a了第一题,人生陷入了低谷,于是花了一天的时间终于把不会的弄明白了,在这里写一份总结~ T1,简单的模拟,如果打枪打中一支鸟,将这个位置设为0,并向两边扩散,注意这个位置一定要有鸟. 代码~ #include<bits/stdc++.h> using namespace std; int a[30000]; int n,m; int main() { cin>>n; for(int i=1;i<=n;i++) ci