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

两天总分rank14,退役稳稳的

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

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

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

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

T1:ZYB修围墙

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

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

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

T2:ZYB和售货机

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

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

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

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

 #include<cstdio>
#include<iostream>
using namespace std;
#define S 100005
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;
int sta[S],top,sec[S];
void link(int a,int b){l[++ec]=fir[a];fir[a]=ec;to[ec]=b;}
void dfs(int p){
al[p]=;sta[++top]=p;
for(int i=fir[p];i;i=l[i])if(!al[to[i]])dfs(to[i]);
else if(to[i]==p)continue;
else if(al[to[i]]==){
int mn=<<,j=;sta[top+]=to[i];
while(sta[j]!=to[i])j++;
for(;j<=top;++j)
mn=min(mn,d[sta[j+]]-c[sta[j]]-max(,-sec[sta[j+]]+d[sta[j+]]));
ans-=mn;
}
al[p]=;top--;
}
int main(){
freopen("goods.in","r",stdin);freopen("goods.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d%d%d%d",&f[i],&c[i],&d[i],&a[i]),mn[i]=sec[i]=;
for(int i=;i<=n;++i)if(mn[f[i]]>c[i])mn[f[i]]=c[i],ord[f[i]]=i;
for(int i=;i<=n;++i)if(mn[i]<d[i])ans+=1ll*a[i]*(d[i]-mn[i]),link(ord[i],i);
for(int i=;i<=n;++i)if(sec[f[i]]>c[i]&&i!=ord[f[i]])sec[f[i]]=c[i];
for(int i=;i<=n;++i)if(!al[i])top=,dfs(i);
printf("%lld\n",ans);
}

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

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

input:


output:


T3:ZYB玩字符串

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

cbx没脸粘我代码。

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

 #include<bits/stdc++.h>
using namespace std;
map<string,int>M;
int lim,n,len,cnt[],tcnt[],used[],fin;string s,chk,ans;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
bool sch(int l,int num){
if(num+fin>lim)return false;
if(l==n)return true;
if(chk[]==s[l]){
used[num+]=;
if(sch(l+,num+))return true;
used[num+]=;
}
if(chk[used[num]]==s[l]){
used[num]++;int nt=;
if(used[num]==len)num--,fin++,nt=;
if(sch(l+,num))return true;
if(nt)num++,fin--;
used[num]--;
}
return false;
}
int main(){
freopen("string.in","r",stdin);freopen("string.out","w",stdout);
int t;scanf("%d",&t);
while(t--){
cin>>s;n=s.length();reverse(s.begin(),s.end());ans="";M.clear();
for(int i=;i<;++i)cnt[i]=;
for(int i=;i<n;++i)cnt[s[i]-'a']++;
int g=;
for(int pt=;pt<;++pt)g=gcd(g,cnt[pt]);
for(len=;len<=n;++len)if(n%len==){
lim=n/len;if(lim>g)continue;
for(int st=;st+len-<n;++st)if(s[st]==s[]&&s[n-]==s[st+len-]){
chk="";
for(int i=;i<;++i)tcnt[i]=;
for(int i=st;i<=st+len-;++i)chk+=s[i],tcnt[s[i]-'a']++;
if(M[chk])goto ed;M[chk]=;
for(int i=;i<;++i)if(cnt[i]&&(!tcnt[i]||cnt[i]%tcnt[i]||cnt[i]/tcnt[i]!=lim))goto ed;
for(int i=;i<=lim+;++i)used[i]=;fin=;
if(sch(,)){reverse(chk.begin(),chk.end());if(ans.empty())ans=chk;else ans=min(ans,chk);}ed:;
}
if(!ans.empty())break;
}cout<<ans<<endl;
}
}

除了测试点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没脸粘我代码。

 #include<bits/stdc++.h>
using namespace std;
map<string,int>M;
int lim,n,len,cnt[],tcnt[];string s,chk,ans;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
bool dp[][];
bool sch(){
for(int i=;i<n;++i)for(int j=i;j<n;++j)dp[i][j]=;
for(int i=;i<n;++i)dp[i][i-]=;
dp[][]=;
for(int i=;i<n;++i){
if(i)for(int j=;j<=i;++j)dp[j][i]|=dp[j][i-]&(s[i]==chk[(i-j)%len]);
if(s[i]==chk[len-])for(int j=;j<=i;++j)for(int k=;j<=i-k*len+;++k)
dp[j][i]|=dp[j][i-k*len]&dp[i-k*len+][i];
}
return dp[][n-];
}
int main(){
freopen("string.in","r",stdin);freopen("string.out","w",stdout);
int t;scanf("%d",&t);
while(t--){
cin>>s;n=s.length();ans="";M.clear();
for(int i=;i<;++i)cnt[i]=;
for(int i=;i<n;++i)cnt[s[i]-'a']++;
int g=;
for(int pt=;pt<;++pt)g=gcd(g,cnt[pt]);
for(len=;len<=n;++len)if(n%len==){
lim=n/len;if(lim>g)continue;
for(int st=;st+len-<n;++st)if(s[st]==s[]&&s[n-]==s[st+len-]){
chk="";
for(int i=;i<;++i)tcnt[i]=;
for(int i=st;i<=st+len-;++i)chk+=s[i],tcnt[s[i]-'a']++;
if(!ans.empty()&&chk>ans)goto ed;
if(M[chk])goto ed;M[chk]=;
for(int i=;i<;++i)if(cnt[i]&&(!tcnt[i]||cnt[i]%tcnt[i]||cnt[i]/tcnt[i]!=lim))goto ed;
if(sch())if(ans.empty())ans=chk;else ans=min(ans,chk);ed:;
}
if(!ans.empty())break;
}cout<<ans<<endl;
}
}

目前是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. LNMP-Nginx配置SSL

    SLL工作流程: 浏览器发送一个https的请求给服务器: 服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以 ...

  2. RocketMQ 整合 DLedger(多副本)即主从切换实现平滑升级的设计技巧

    目录 1.阅读源码之前的思考 2.从 Broker 启动流程看 DLedger 2.1 构建 DefaultMessageStore 2.2 增加节点状态变更事件监听器 2.3 调用 DefaultM ...

  3. webpack学习3.1由浅入深-打包JS

    打包JS Step1:在新建的文件夹下新建一个sum.js文件,一个app.js文件 sum.js //es module export default function(a,b){ return a ...

  4. CCF-CSP题解 201412-4 最优灌溉

    \(kruskal\),有兴趣\(heap\_prim\).\(stl\ pq\)实现复杂度相同. #include <bits/stdc++.h> using namespace std ...

  5. SQL- SQL查询检索阶段一

    一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统: 二 准备前提 需要建立一张学生表,列分别是id,名称, ...

  6. C++错误unresolved external symbol _WinMain@16

    C++错误unresolved external symbol _WinMain@16 Linking...  LIBCD.lib(wincrt0.obj) : error LNK2001: unre ...

  7. springcloud-eureka高可用集群搭建

    一 前言 eureka作为注册中心,其充当着服务注册与发现功能,加载负载均衡:若在项目运行中eureka挂了,那么整个服务整体都会暂停,所以为服务运行的安全性,有必要搭建eureka集群:当其中一个e ...

  8. WC集训DAY2笔记 组合计数 part.1

    目录 WC集训DAY2笔记 组合计数 part.1 基础知识 组合恒等式 错排数 卡特兰数 斯特林数 伯努利数 贝尔数 调和级数 后记 补完了几天前写的东西 WC集训DAY2笔记 组合计数 part. ...

  9. 微信Pcweb登录简介

    微信第三方PCweb扫码登录 准备工作 (1) 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之 ...

  10. Spring cloud ——EurekaServer

    Eureka作为服务注册与发现的组件,Eureka2.0已经闭源了,但是本教程还是以Eureka为核心进行展开. 1.三个模块 Spring Cloud Eureka是Spring Cloud Net ...