不用你们说,我自己来:我颓闪存我没脸。

昨天的想法,

今天的回答。

生存,

发展。

总分榜应该稍有回升,但是和上面的差距肯定还是很大。

继续。

为昨天的谬误,承担代价。

T2和T3都值得张记性。

T2因为上次输出了"-0.00"在文本比较下与"0.0"不同导致WA,所以这次输出的时候把答案加了0.005

但是加的太多了,在四舍五入下恰好进位了导致WA。

为了防止输出"-0.0"要将答案加一个1e-9级别的数,不要太小也不要太大。

T3算错上限没打高精。

考虑极端情况。考试时不要用__int128(CSP-S不认可)

我不喜欢RP守恒。

我想稳在rank5以内。遥不可及。

T1:军训队列。

一个明显的斜率优化dp。但是考场上推了一会没有推出来。

然而这题用不到,因为身高最多有6001种,所以$O(6001*6001*k)$可过

但是要注意把所有人身高压起来后n可能小于k,判掉。

斜率优化的假单调栈可以当成是一个剪枝。

 #include<cstdio>
#include<algorithm>
using namespace std;
double dp[][],h[];int n,k,q[],qh,qt;
double fab2(double x){return x*x;}
double cal(int j,int k,int f){return (dp[j][f-]-dp[k][f-])/(h[j+]-h[k+])+h[j+]+h[k+];}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;++i)scanf("%lf",&h[i]);
sort(h+,h++n);n=unique(h+,h++n)-h-;h[n+]=1e9;
for(int i=;i<=n;++i)dp[i][]=fab2(h[i]-h[]);
for(int j=;j<=k;++j){
q[qt=qh=]=;
for(int i=;i<=n;++i){
dp[i][j]=1e18;
while(qt-qh>=&&cal(q[qh+],q[qh],j)<h[i]*)qh++;
for(int p=qh;p<=qt;++p)dp[i][j]=min(dp[i][j],dp[q[p]][j-]+fab2(h[i]-h[q[p]+]));
q[++qt]=i;
}
}printf("%.2lf\n",dp[n][k]);
}

然而当然也可以打一个真正的斜率优化。

转移式是$dp[i][f]=min(dp[j][f-1]+(h[j+1])^2+(h[i])^2-2\times h[j+1] \times h[i])$

然后接下来与i有关的项都可以提出来,剩下的是常数。

然后就可以得到一个关于$h[i]$的一次函数(直线)。

因为在这道题里h是单调的,所以斜率是单调的,取值的横坐标也是单调的。

所以就是一堆直线,可以维护凸包了。

 #include<cstdio>
#include<algorithm>
using namespace std;
double dp[][],h[],k[],b[];int n,K,q[],qh,qt;
double fab2(double x){return x*x;}
double cal(int j,double x){return b[j]+k[j]*x;}
double jd(int j,int i){return (b[j]-b[i])/(k[i]-k[j]);}
int main(){
scanf("%d%d",&n,&K);
for(int i=;i<=n;++i)scanf("%lf",&h[i]);
sort(h+,h++n);n=unique(h+,h++n)-h-;h[n+]=1e9;
for(int i=;i<=n;++i)dp[i][]=fab2(h[i]-h[]);
for(int j=;j<=K;++j){
q[qt=qh=]=j-;k[j-]=-*h[j];b[j-]=dp[j-][j-]+fab2(h[j]);
for(int i=j;i<=n;++i){
k[i]=-*h[i+];b[i]=dp[i][j-]+fab2(h[i+]);
while(qt-qh>=&&cal(q[qh],h[i])>cal(q[qh+],h[i]))qh++;
while(qt-qh>=&&jd(q[qt-],i)>jd(q[qt],i))qt--;
dp[i][j]=dp[q[qh]][j-]+fab2(h[i]-h[q[qh]+]);
q[++qt]=i;
}
}printf("%.2lf\n",dp[n][K]);
}

T2:山屋惊魂

规模不是很大的模拟。虽说也不小。

预处理一下dize[i][j]表示用i个骰子得到j的概率。(骰子的英语不是dize。。。打脸。。。但是我懒得改了)

然后。。我也不知道该讲什么。。。模拟好像真的没办法讲。。。

按照题目说的就是了。不要读错题

其实我不是很明白为什么会打的那么长,并没有感觉这个模拟比以前的模拟难很多。。。

 #include<cstdio>
#include<string>
#include<iostream>
#include<map>
using namespace std;
map<string,int>M;
long double dize[][],pos[][],fail,ans[][],lim[][][];
int n,st[],s[],c1[],c2[],num;
string bar[],knd,opt;
int chg(int S,int p,int w){return (S^S&<<p*)|w<<p*;}
int main(){//freopen("betrayal.in","r",stdin);
dize[][]=;
for(int i=;i<=;++i)for(int j=;j<=i<<;++j)
dize[i+][j]+=dize[i][j]/,dize[i+][j+]+=dize[i][j]/,dize[i+][j+]+=dize[i][j]/;
for(int i=;i<;++i)cin>>bar[i]>>st[i],st[i]--;
cin>>n;
pos[][st[]|st[]<<|st[]<<|st[]<<]=;
M["Might"]=;M["Speed"]=;M["Sanity"]=;M["Knowledge"]=;
for(int i=;i<n;++i){
cin>>knd>>opt;
if(opt=="<"){
cin>>num;
for(int j=;j<=;++j)for(int k=;k<=;++k)lim[i][M[knd]][j]+=(dize[bar[M[knd]][j]-''][k]*(k>=num));
cin>>knd>>opt;
}else if(opt=="<="){
cin>>num;
for(int j=;j<=;++j)for(int k=;k<=;++k)lim[i][M[knd]][j]+=(dize[bar[M[knd]][j]-''][k]*(k> num));
cin>>knd>>opt;
}else if(opt==">"){
cin>>num;
for(int j=;j<=;++j)for(int k=;k<=;++k)lim[i][M[knd]][j]+=(dize[bar[M[knd]][j]-''][k]*(k<=num));
cin>>knd>>opt;
}else if(opt==">="){
cin>>num;
for(int j=;j<=;++j)for(int k=;k<=;++k)lim[i][M[knd]][j]+=(dize[bar[M[knd]][j]-''][k]*(k< num));
cin>>knd>>opt;
}
s[i]=M[knd];
if(opt[]=='+')if(opt.length()==)c2[i]+=opt[]-'';
else c1[i]+=opt[]-'';
if(opt[]=='-')if(opt.length()==)c2[i]-=opt[]-'';
else c1[i]-=opt[]-'';//printf("%d %d %d\n",s[i],c1[i],c2[i]);
}
for(int i=;i<n;++i)for(int S=;S<<<;++S){
int state[]={S&,S>>&,S>>&,S>>&};
double rp=pos[i][S];
for(int j=;j<;++j)rp*=(-lim[i][j][state[j]]);
pos[i+][S]+=pos[i][S]-rp;
if(c1[i]){
state[s[i]]+=c1[i];state[s[i]]=min(state[s[i]],);
if(state[s[i]]<)fail+=rp;
else pos[i+][chg(S,s[i],state[s[i]])]+=rp;
}else if(c2[i]>=){
for(int r=;r<=;++r){
double P=rp*dize[c2[i]][r];
int nw=state[s[i]]+r;nw=min(nw,);
pos[i+][chg(S,s[i],nw)]+=P;
}
}else{
for(int r=;r<=;++r){
double P=rp*dize[-c2[i]][r];
int nw=state[s[i]]-r;
if(nw<)fail+=P;
else pos[i+][chg(S,s[i],nw)]+=P;
}
}ed:;
}
printf("%.2Lf\n",fail*+0.0001);
for(int i=;i<<<;++i)for(int k=;k<;++k)ans[k][bar[k][i>>k*&]-'']+=pos[n][i];
for(int k=;k<;++k,puts(""))for(int i=;i<;++i)printf("%.2Lf ",ans[k][i]*+0.0001);
}

2.4k,可写

 #include<cstdio>
#include<string>
#include<iostream>
#include<map>
using namespace std;
map<string,int>M;
double dize[][],pos[][],fail,ans[][],lim[][][];
int n,st[],s[],c1[],c2[],num;
string bar[],knd,opt;
int chg(int S,int p,int w){return (S^S&<<p*)|w<<p*;}
int abs(int a){return a>?a:-a;}
int nt(int a){return a>?:-;}
int OPT(string s,int a,int b){return s=="<="?a>b:(s=="<"?a>=b:(s==">="?a<b:a<=b));}
int main(){
dize[][]=;
for(int i=;i<;++i)for(int j=;j<=i*;++j)
dize[i+][j]+=dize[i][j]/,dize[i+][j+]+=dize[i][j]/,dize[i+][j+]+=dize[i][j]/;
for(int i=;i<;++i)cin>>bar[i]>>st[i],st[i]--;
cin>>n; pos[][st[]|st[]<<|st[]<<|st[]<<]=;
M["Speed"]=;M["Sanity"]=;M["Knowledge"]=;
for(int i=;i<n;++i){
cin>>knd>>opt;
if(opt[]!='+'&&opt[]!='-'){
cin>>num;
for(int j=;j<;++j)for(int k=;k<=;++k)
lim[i][M[knd]][j]+=(dize[bar[M[knd]][j]-''][k]*OPT(opt,k,num));
cin>>knd>>opt;
}
s[i]=M[knd];
if(opt.length()==)c2[i]+=(opt[]-'')*(opt[]=='+'?:-);
else c1[i]+=(opt[]-'')*(opt[]=='+'?:-);
}
for(int i=;i<n;++i)for(int S=;S<<<;++S){
int state[]={S&,S>>&,S>>&,S>>&}; double rp=pos[i][S];
for(int j=;j<;++j)rp*=(-lim[i][j][state[j]]);
pos[i+][S]+=pos[i][S]-rp;
if(c1[i]){
state[s[i]]+=c1[i];state[s[i]]=min(state[s[i]],);
if(state[s[i]]<)fail+=rp;
else pos[i+][chg(S,s[i],state[s[i]])]+=rp;
}else for(int r=;r<=;++r){
double P=rp*dize[abs(c2[i])][r];
int nw=state[s[i]]+nt(c2[i])*r;nw=min(nw,);
if(nw<)fail+=P;else pos[i+][chg(S,s[i],nw)]+=P;
}
}
printf("%.2lf\n",fail*+1e-);
for(int i=;i<<<;++i)for(int k=;k<;++k)ans[k][bar[k][i>>k*&]-'']+=pos[n][i];
for(int k=;k<;++k,puts(""))for(int i=;i<;++i)printf("%.2lf ",ans[k][i]*+1e-);
}

1.8k,压行

压行后的代码不存在任何的复制粘贴了,可以简单扩展了。

T3:彩球问题

记忆化搜索/dp

状态4维,12/12/12/4,分别表示还有1/2/3个的球有几种颜色,且上一次用的球还剩下0/1/2个

然后又是模拟?

最后的答案貌似有$10^{33}$级别?

 #include<cstdio>
#define dp re[c1][c2][c3][lst]
__int128 ans,re[][][][];int cnt[],n,x;
__int128 sch(int c1,int c2,int c3,int lst){
if(dp!=-)return dp;
dp=;
if(c1==&&c2==&&c3==)return ;
if(lst==){
if(c1)dp+=c1*sch(c1-,c2,c3,);
if(c2)dp+=c2*sch(c1+,c2-,c3,);
if(c3)dp+=c3*sch(c1,c2+,c3-,);
}else if(lst==){
if(c1>)dp+=(c1-)*sch(c1-,c2,c3,);
if(c2)dp+=c2*sch(c1+,c2-,c3,);
if(c3)dp+=c3*sch(c1,c2+,c3-,);
}else if(lst==){
if(c1)dp+=c1*sch(c1-,c2,c3,);
if(c2>)dp+=(c2-)*sch(c1+,c2-,c3,);
if(c3)dp+=c3*sch(c1,c2+,c3-,);
}return dp;
}
int main(){
scanf("%d",&n);
while(n--)scanf("%d",&x),cnt[x]++;
for(int i=;i<;++i)for(int j=;j<;++j)for(int k=;k<;++k)for(int l=;l<;++l)re[i][j][k][l]=-;
__int128 x=sch(cnt[],cnt[],cnt[],);
if(x/1000000000000000000ll)printf("%lld",(long long)(x/1000000000000000000ll));
printf("%lld\n",(long long)(x%1000000000000000000ll));
}

你可以用int128水过

 #include<cstdio>
#define dp re[c1][c2][c3][lst]
struct LL{
long long x[];
#define mod 100000000
friend void operator+=(LL &a,LL b){
for(int i=;i<;++i)a.x[i]+=b.x[i];
for(int i=;i<;++i)a.x[i+]+=a.x[i]/mod,a.x[i]%=mod;
}
void print(int i=){
for(;~i;--i)if(x[i]){printf("%lld",x[i]);break;}
for(--i;~i;--i)printf("%08lld",x[i]);
}
friend LL operator*(int x,LL a){
for(int i=;i<;++i)a.x[i]*=x;
for(int i=;i<;++i)a.x[i+]+=a.x[i]/mod,a.x[i]%=mod;
return a;
}
friend bool operator!=(LL a,int x){return a.x[]!=-;}
void operator=(int p){x[]=p;}
};
LL ans,re[][][][];int cnt[],n,x;
LL sch(int c1,int c2,int c3,int lst){
if(dp!=-)return dp;
dp=;
if(c1==&&c2==&&c3==)return dp=,dp;
if(lst==){
if(c1)dp+=c1*sch(c1-,c2,c3,);
if(c2)dp+=c2*sch(c1+,c2-,c3,);
if(c3)dp+=c3*sch(c1,c2+,c3-,);
}else if(lst==){
if(c1>)dp+=(c1-)*sch(c1-,c2,c3,);
if(c2)dp+=c2*sch(c1+,c2-,c3,);
if(c3)dp+=c3*sch(c1,c2+,c3-,);
}else if(lst==){
if(c1)dp+=c1*sch(c1-,c2,c3,);
if(c2>)dp+=(c2-)*sch(c1+,c2-,c3,);
if(c3)dp+=c3*sch(c1,c2+,c3-,);
}return dp;
}
int main(){
scanf("%d",&n);
while(n--)scanf("%d",&x),cnt[x]++;
for(int i=;i<;++i)for(int j=;j<;++j)for(int k=;k<;++k)for(int l=;l<;++l)re[i][j][k][l]=-;
sch(cnt[],cnt[],cnt[],).print();
}

但是显然作为一个有脸的人还是要写一次高精的

因为真正CSP-S上也不能用__int128,所以就算是模拟赛写高精也是很有必要的。

态度必须要有,天人不相欺。

[考试反思]1026csp-s模拟测试88:发展的更多相关文章

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

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

  2. 2019.10.26 csp-s模拟测试88 反思总结

    今天的主人公是什么? 60.1K!!!! 先扔代码再更新防止我等会儿一上头不打算写完题解 T1: #include<iostream> #include<cstdio> #in ...

  3. CSP-S模拟测试 88 题解

    T1 queue: 考场写出dp柿子后觉得很斜率优化,然后因为理解错了题觉得斜率优化完全不可做,只打了暴力. 实际上他是可以乱序的,所以直接sort,正确性比较显然,贪心可证,然后就是个sb斜率优化d ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. redhat 7系统服务工具-systemctl

  2. Swoole4-swoole创建Mysql连接池

    一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个 ...

  3. 【CJOJ】为了博多

    Description 做了个噩梦,梦见我的 n 把刀到60级会二次变身,变成一个 对推6图有xi点贡献,刷大阪城有yi点贡献 的刀,于是要把刀分成两队一队刷大阪城另一队推6图 . 但是有m对兄弟刀在 ...

  4. Cohen-Sutherland算法

    Cohen-Sutherland算法 本算法又称为编码裁剪算法,算法的基本思想是对每 条直线段分三种情况处理: (1)若点p1和p 2完全在裁剪窗口内 “简取”之 (2)若点p1(x1,y1)和p2( ...

  5. CS184.1X 计算机图形学导论 罗德里格斯公式推导

    罗德里格斯公式推导 图1(复制自wiki) 按照教程里,以图1为例子,设k为旋转轴,v为原始向量. v以k为旋转轴旋转,旋转角度为θ,旋转后的向量为vrot. 首先我们对v进行分解,分解成一个平行于k ...

  6. EF通过导航属性取出从表的集合后,无法删除子表

    主从表是配了级联删除的,如果通过导航属性去除从表明细删除时将报错The relationship could not be changed because one or more of the for ...

  7. 渗透测试-基于白名单执行payload--Csc

    复现亮神课程 基于白名单执行payload--csc 0x01 Csc.exe C#的在Windows平台下的编译器名称是Csc.exe,如果你的.NET FrameWork SDK安装在C盘,那么你 ...

  8. HTML 元素居中的方法

    网址:http://www.cnblogs.com/asqq/archive/2012/04/09/2438745.html 1. 元素的定位的方法选择 :absolute . 2. 给定元素的宽和高 ...

  9. 《FFT家族—从不会到崩溃(坑)》读blog笔记

    免责声明 原文地址https://blog.csdn.net/linjiayang2016/article/details/80341958,作者linjiayang2016.\text{linjia ...

  10. [Luogu4550] 收集邮票

    题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所 ...