在这么考下去可以去混女队了2333

两天总分rank14,退役稳稳的

的确就是没状态。满脑子都是《包围保卫王国》ddp/LCT/ST,没好好考试。

我太菜了写题也写不出来考试也考不好(显然《保卫王国》40分钟是调不出来的)

也不知道为什么特别想A了它。。。莫名的执念

也许所谓的OI也就是一念之间的问题吧。

T1:ZYB修围墙

答案有可能是偶数。扩展一面墙的时候相对的墙不一定要扩展。

边长为a时,6次扩展的收益分别为a,a-1,a,a,a,a

  1. #include<cstdio>
  2. main(){
  3. freopen("wall.in","r",stdin);freopen("wall.out","w",stdout);
  4. int n,cnt=,i=;scanf("%d",&n);
  5. for(;cnt<n;++i,cnt+=i/-(i%==));
  6. printf("%d\n",i);
  7. }

T2:ZYB和售货机

每个物品多数情况下只会被以最低的买入价格买入。这样形成建边关系。

然后如果图里没有环那么收益就是最低价买入后卖出。(40pts)

否则,对于环上的所有点,其中有一个必须以次低价买入。

统计一下这样的亏损,取环上最小的亏损值从答案里减去即可。

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. #define S 100005
  5. int f[S],c[S],d[S],a[S],n,mn[S],ord[S],al[S],fir[S],l[S],to[S],ec;long long ans;
  6. int sta[S],top,sec[S];
  7. void link(int a,int b){l[++ec]=fir[a];fir[a]=ec;to[ec]=b;}
  8. void dfs(int p){
  9. al[p]=;sta[++top]=p;
  10. for(int i=fir[p];i;i=l[i])if(!al[to[i]])dfs(to[i]);
  11. else if(to[i]==p)continue;
  12. else if(al[to[i]]==){
  13. int mn=<<,j=;sta[top+]=to[i];
  14. while(sta[j]!=to[i])j++;
  15. for(;j<=top;++j)
  16. mn=min(mn,d[sta[j+]]-c[sta[j]]-max(,-sec[sta[j+]]+d[sta[j+]]));
  17. ans-=mn;
  18. }
  19. al[p]=;top--;
  20. }
  21. int main(){
  22. freopen("goods.in","r",stdin);freopen("goods.out","w",stdout);
  23. scanf("%d",&n);
  24. for(int i=;i<=n;++i)scanf("%d%d%d%d",&f[i],&c[i],&d[i],&a[i]),mn[i]=sec[i]=;
  25. for(int i=;i<=n;++i)if(mn[f[i]]>c[i])mn[f[i]]=c[i],ord[f[i]]=i;
  26. for(int i=;i<=n;++i)if(mn[i]<d[i])ans+=1ll*a[i]*(d[i]-mn[i]),link(ord[i],i);
  27. for(int i=;i<=n;++i)if(sec[f[i]]>c[i]&&i!=ord[f[i]])sec[f[i]]=c[i];
  28. for(int i=;i<=n;++i)if(!al[i])top=,dfs(i);
  29. printf("%lld\n",ans);
  30. }

样例的环是假的(不是最大收益环,有负收益)

所以提供一组AKT的极其简单的调试用hack数据:(干掉了我的考场40分代码)

input:

  1.  

output:

  1.  

T3:ZYB玩字符串

cbx没脸粘我代码。(不知道为什么他不让我只重复两遍)

cbx没脸粘我代码。

看懂题目并且打一个搜索就可以获得90分。(有哪个剪枝不明白是干什么用的的话可以去问我)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. map<string,int>M;
  4. int lim,n,len,cnt[],tcnt[],used[],fin;string s,chk,ans;
  5. int gcd(int a,int b){return b?gcd(b,a%b):a;}
  6. bool sch(int l,int num){
  7. if(num+fin>lim)return false;
  8. if(l==n)return true;
  9. if(chk[]==s[l]){
  10. used[num+]=;
  11. if(sch(l+,num+))return true;
  12. used[num+]=;
  13. }
  14. if(chk[used[num]]==s[l]){
  15. used[num]++;int nt=;
  16. if(used[num]==len)num--,fin++,nt=;
  17. if(sch(l+,num))return true;
  18. if(nt)num++,fin--;
  19. used[num]--;
  20. }
  21. return false;
  22. }
  23. int main(){
  24. freopen("string.in","r",stdin);freopen("string.out","w",stdout);
  25. int t;scanf("%d",&t);
  26. while(t--){
  27. cin>>s;n=s.length();reverse(s.begin(),s.end());ans="";M.clear();
  28. for(int i=;i<;++i)cnt[i]=;
  29. for(int i=;i<n;++i)cnt[s[i]-'a']++;
  30. int g=;
  31. for(int pt=;pt<;++pt)g=gcd(g,cnt[pt]);
  32. for(len=;len<=n;++len)if(n%len==){
  33. lim=n/len;if(lim>g)continue;
  34. for(int st=;st+len-<n;++st)if(s[st]==s[]&&s[n-]==s[st+len-]){
  35. chk="";
  36. for(int i=;i<;++i)tcnt[i]=;
  37. for(int i=st;i<=st+len-;++i)chk+=s[i],tcnt[s[i]-'a']++;
  38. if(M[chk])goto ed;M[chk]=;
  39. for(int i=;i<;++i)if(cnt[i]&&(!tcnt[i]||cnt[i]%tcnt[i]||cnt[i]/tcnt[i]!=lim))goto ed;
  40. for(int i=;i<=lim+;++i)used[i]=;fin=;
  41. if(sch(,)){reverse(chk.begin(),chk.end());if(ans.empty())ans=chk;else ans=min(ans,chk);}ed:;
  42. }
  43. if(!ans.empty())break;
  44. }cout<<ans<<endl;
  45. }
  46. }

除了测试点9一共190ms

考场上想到应该是个dp但是想不到定义。dp[i][j]表示[i,j]段除了前(j-i)%len位完美匹配了整串前缀以外剩下的位置也可以被完美消除。

考虑每一位加入的贡献。(我的字符串下标从0开始,s表示原串,chk表示当前)

dp[i][j]|=dp[i][j-1]&(s[j]==chk[(j-i)%len])。就是在最后多匹配了一位。

dp[i][j]|=dp[i][j-k*len]&dp[j-k*len+1][j]。就是后面有几个完整的段被吃掉了。

从含义上理解,这已经包含了所有情况。

初始状态就是所有空串都是合法的,其余都是0。

加上考场上的剪枝,效率极其优秀。

到底有多优秀,去看cbx卡成了什么样子吧。。。

cbx没脸粘我代码。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. map<string,int>M;
  4. int lim,n,len,cnt[],tcnt[];string s,chk,ans;
  5. int gcd(int a,int b){return b?gcd(b,a%b):a;}
  6. bool dp[][];
  7. bool sch(){
  8. for(int i=;i<n;++i)for(int j=i;j<n;++j)dp[i][j]=;
  9. for(int i=;i<n;++i)dp[i][i-]=;
  10. dp[][]=;
  11. for(int i=;i<n;++i){
  12. if(i)for(int j=;j<=i;++j)dp[j][i]|=dp[j][i-]&(s[i]==chk[(i-j)%len]);
  13. if(s[i]==chk[len-])for(int j=;j<=i;++j)for(int k=;j<=i-k*len+;++k)
  14. dp[j][i]|=dp[j][i-k*len]&dp[i-k*len+][i];
  15. }
  16. return dp[][n-];
  17. }
  18. int main(){
  19. freopen("string.in","r",stdin);freopen("string.out","w",stdout);
  20. int t;scanf("%d",&t);
  21. while(t--){
  22. cin>>s;n=s.length();ans="";M.clear();
  23. for(int i=;i<;++i)cnt[i]=;
  24. for(int i=;i<n;++i)cnt[s[i]-'a']++;
  25. int g=;
  26. for(int pt=;pt<;++pt)g=gcd(g,cnt[pt]);
  27. for(len=;len<=n;++len)if(n%len==){
  28. lim=n/len;if(lim>g)continue;
  29. for(int st=;st+len-<n;++st)if(s[st]==s[]&&s[n-]==s[st+len-]){
  30. chk="";
  31. for(int i=;i<;++i)tcnt[i]=;
  32. for(int i=st;i<=st+len-;++i)chk+=s[i],tcnt[s[i]-'a']++;
  33. if(!ans.empty()&&chk>ans)goto ed;
  34. if(M[chk])goto ed;M[chk]=;
  35. for(int i=;i<;++i)if(cnt[i]&&(!tcnt[i]||cnt[i]%tcnt[i]||cnt[i]/tcnt[i]!=lim))goto ed;
  36. if(sch())if(ans.empty())ans=chk;else ans=min(ans,chk);ed:;
  37. }
  38. if(!ans.empty())break;
  39. }cout<<ans<<endl;
  40. }
  41. }

目前是54ms

[考试反思]1113csp-s模拟测试113:一念的更多相关文章

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

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

  2. csp-s模拟测试112 & csp-s模拟测试113

    考前两天模拟. Day1直接炸飞,T1浪费的时间太长,对拍+调试了一个多小时但复杂度还不能过,最后5分钟想出来了解决方案但是已经打不出来了.T2读入出了事故RE0.T3打了假贪心. Day2心态几乎也 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 【Webpack】315- 手把手教你搭建基于 webpack4 的 vue2 多页应用

    背景 前司和现司都会存在这种业务场景:有很多 H5 页面是不相关的,如果使用 SPA 的话,对于很多落地页和活动页不太友好,有一些纯前端页面加载过慢,所以就萌生了创建一个多页面 MPA 的框架. 起初 ...

  2. QEMU让你无需开发板即可玩溜RT-Thread~

    1.1 本文的目的和背景 嵌入式软件开发离不开开发板,在没有物理开发板的情况下,可以使用QEMU等类似的虚拟机来模拟开发板.QEMU是一个支持跨平台虚拟化的虚拟机,它可以虚拟很多开发板.为了方便大家在 ...

  3. Java中final修饰的数据

    目录 Java中final修饰的数据 有初始值的final域 final+基本数据类型 final+引用数据类型 final与static final 空白final域 final修饰的参数 基本数据 ...

  4. eclipse 创建 springboot项目

    file --> new --> project --> Spring Boot  --> Spring  start  project Group:公司域名倒置,一般是com ...

  5. vue-cli项目中引入第三方插件

    前言 最近有小伙伴问道如何在vue-cli项目中引入第三方插件或者库,例如如果想在项目中使用jQuery中的Ajax请求数据呢?或者我想使用Bootstrap框架呢?等等这些问题,本篇博客将带你学习如 ...

  6. Centos6.5 Intel X722 编译安装网卡驱动

    1,编译环境准备,安装好kernel-devl ,kenel-headers等; 注意: 一定要注意kernel 的内核,一定要保持被安装的机器与编译的内核保持一致; 下载驱动地址:https://d ...

  7. Spring与Shiro整合 静态注解授权

    Spring与Shiro整合 静态注解授权 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 使用Shiro的种类 首先,Shiro的授权方式共有三种: 1.编程式授权(不推荐) 2. ...

  8. javascript的ES6学习总结(第三部分)

    1.ES6中的面向对象的类 1.1.定义类 在ES5中,我们写一个类,通常是这么写的 function Person(name,age){ this.name = name; this.age = a ...

  9. 1、手写Unity容器--极致简陋版Unity容器

    模拟Unity容器实例化AndroidPhone 思路: 1.注册类型:把类型完整名称作为key添加到数据字典中,类型添加到数据字典的value中 2.获取实例:根据完整类型名称也就是key取出val ...

  10. 【前端学习】网页tab键的实现 01

    友情提醒:阅读本文需要了解一些基本的html/Css/Javascript知识 前端常用tab键的实现,用到的原理是当点击一个元素时,通过javascript操作css的display属性,达到控制另 ...