分数倒是依旧那么烂,但是这个时间比较诡异。

6分49秒弄出T1,15分钟送上T2的50分暴力,不到一小时半的时候T3的30分暴力也完成了。。。

在85分钟之后一次提交也没有

前15分钟平均每分钟得10分,后三个小时每小时得10分。。。

如果这场考试只考16分钟,我绝对rank1而且能拉第二一大截。

然而这些都是我的yy,最终还不是考得什么也不是么。。。

到了后两个小时,什么也想不出来,听着别人码,看着别人拿分,自己坐以待毙,稍绝望。。。

中途OJ还死了能看到评测结果,打开评测界面挂在顶上的大概是这个东西

T2我想了一辈子也没想出来啊啊啊。。。

然而我要脸我没有看我的分数。赛后看,嗯,果然一分没多。。。

然而T2其实就是包装了一下的B组原题,还是我考场A掉的那个,居然就不会做了

也不知道是状态问题还是怎么的

集训过半。。。

紧张起来吧。。。

T1:最大异或和

每个节点都被拿走了。所以最后两个人得分异或起来就是所有节点的异或和。

如果总异或和上某一位是0那么两个人得分的这一位上一定相同,拉不开差距。

否则这一位就是绝胜位,谁在这一位上是1谁就赢。

然而小Q是可以自行选择节点了,选择任意一个这一位上是1的节点他就赢了。

如果没有绝胜位,即异或和为0,就是平局。

 #include<cstdio>
int main(){
int t,n,X;scanf("%d",&t);
while(t--){
scanf("%d",&n);X=;
for(int i=,x;i<=n;++i)scanf("%d",&x),X^=x;
for(int i=,x,y;i<n;++i)scanf("%d%d",&x,&y);
puts(X?"Q":"D");
}
}

为何不秒切?

T2:简单的括号序列

 #include<cstdio>
#define mod 1000000007
int min(int a,int b){return a<b?a:b;}
int fac[],inv[],invv[],n,pre[],suf[],ans;char s[];
int C(int b,int t){return 1ll*fac[b]*inv[t]%mod*inv[b-t]%mod;}
main(){
scanf("%s",s+);while(s[n+])n++;
fac[]=fac[]=inv[]=inv[]=invv[]=;
for(int i=;i<=n;++i)fac[i]=1ll*fac[i-]*i%mod,invv[i]=mod-1ll*mod/i*invv[mod%i]%mod,inv[i]=1ll*inv[i-]*invv[i]%mod;
for(int i=;i<=n;++i)pre[i]=pre[i-]+(s[i]=='(');
for(int i=n;i;--i)suf[i]=suf[i+]+(s[i]==')');
for(int i=;i<=n;++i)if(s[i]==')')for(int j=;j<=min(pre[i],suf[i]);++j)
ans=(ans+1ll*C(pre[i],j)*C(suf[i]-,j-))%mod;
printf("%d\n",ans);
}

50分暴力不细说

瓶颈在于式子$\sum\limits_{i=1}^{min(pre,suf)}C_{pre}^{i} \times C_{suf-1}^{i-1}$

$=\sum\limits_{i=1}^{min(pre,suf)}C_{pre}^{pre-i} \times C_{suf-1}^{i-1}$

两枣树问题,从含义上即可理解:就是$C_{pre+suf-1}^{pre-1}$

 #include<cstdio>
#define mod 1000000007
int min(int a,int b){return a<b?a:b;}
int fac[],inv[],invv[],n,pre[],suf[],ans;char s[];
int C(int b,int t){return 1ll*fac[b]*inv[t]%mod*inv[b-t]%mod;}
main(){
scanf("%s",s+);while(s[n+])n++;
fac[]=fac[]=inv[]=inv[]=invv[]=;
for(int i=;i<=n;++i)fac[i]=1ll*fac[i-]*i%mod,invv[i]=mod-1ll*mod/i*invv[mod%i]%mod,inv[i]=1ll*inv[i-]*invv[i]%mod;
for(int i=;i<=n;++i)pre[i]=pre[i-]+(s[i]=='(');
for(int i=n;i;--i)suf[i]=suf[i+]+(s[i]==')');
for(int i=;i<=n;++i)if(s[i]==')')for(int j=;j<=min(pre[i],suf[i]);++j)
ans=(ans+1ll*C(pre[i],j)*C(suf[i]-,j-))%mod;
printf("%d\n",ans);
}

考场切的原题,现在凭什么反而想不到?

T3:旅行计划

图很密集,不难想到矩阵。

但是这次不是倍增快速幂,而是分块预处理。

100步为1块。处理矩阵p0[i][j][k]表示i步从j到k的最短距离。

p1[i][j][k]表示100i步。p2[i][j][k]表示至少i步。

注意p0和p2要处理到150而不是100,当你需要p2[99][x][y]时它的真实步数可能大于100而你没有处理然后你就WA90了。

 #include<cstdio>
#include<cstring>
using namespace std;
int min(int a,int b){return a<b?a:b;}
int dp0[][][],dp1[][][],dp2[][][],E[][],r[][],n,m,q,x,y,v;
int main(){
scanf("%d%d",&n,&m);
memset(E,0x3f,sizeof E);memset(dp0,0x3f,sizeof dp0);
memset(dp1,0x3f,sizeof dp1);memset(dp2,0x3f,sizeof dp2);
for(int i=;i<=m;++i)scanf("%d%d%d",&x,&y,&v),E[x][y]=min(E[x][y],v);
for(int i=;i<=n;++i)dp0[][i][i]=dp1[][i][i]=;
for(int i=;i<=;++i)for(int j=;j<=n;++j)for(int k=;k<=n;++k)for(int l=;l<=n;++l)
dp0[i][j][k]=min(dp0[i][j][k],dp0[i-][j][l]+E[l][k]);
for(int i=;i<=;++i)for(int j=;j<=n;++j)for(int k=;k<=n;++k)for(int l=;l<=n;++l)
dp1[i][j][k]=min(dp1[i][j][k],dp1[i-][j][l]+dp0[][l][k]);
for(int i=;i<=n;++i)for(int j=;j<=n;++j)for(int k=;~k;--k)
dp2[k][i][j]=min(dp2[k+][i][j],dp0[k][i][j]);
scanf("%d",&q);
while(q--){
scanf("%d%d%d",&x,&y,&v);int ans=;
for(int i=;i<=n;++i)ans=min(ans,dp1[v/][x][i]+dp2[v%][i][y]);
printf("%d\n",ans>?-:ans);
}
}

考场上想到矩阵没想到分块

[考试反思]1023csp-s模拟测试83:等候的更多相关文章

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

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

  2. csp-s模拟测试83(集训过半)

    csp-s模拟测试83(集训过半) 一场信心赛.起初$OJ$爆了我就看见全场$A$了$T1$并且夹杂着$A$掉$T2$我就很难受. 这场比赛没有深入思考,很失败,一个多小时后就结束了我罪恶的一生. 0 ...

  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. [考试反思]0816NOIP模拟测试23

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

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

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

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

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

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

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

随机推荐

  1. springboot之本地缓存(guava与caffeine)

    1. 场景描述 因项目要使用本地缓存,具体为啥不用redis等,就不讨论,记录下过程,希望能帮到需要的朋友. 2.解决方案 2.1 使用google的guava作为本地缓存 初步的想法是使用googl ...

  2. Linux 下复制整个文件夹的命令

    在 Linux 下复制整个文件夹,包括它的子文件夹及其隐藏文件的方法是: cp -r /etc/skel /home/user 或者 mkdir /home/<new_user> cp - ...

  3. FFmpeg(一)

    1. FFmpeg分为3个版本:Static.  Shared. Dev 前两个版本可以直接在命令行中使用.包含了三个exe:ffmpeg.exe,ffplay.exe,ffprobe.exe Sta ...

  4. Java基础学习(八) - 多线程

    理解线程 进程是指一个内存中运行的应用程序,系统运行一个程序即是一个进程从创建,运行,结束的过程. 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程. 多线程的特点是并发 ...

  5. asp.net 开源工作流-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

    关键字:流程未来节点处理人  工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向.对于另 ...

  6. python编程基础之二十五

    匿名函数:不用def 定义的函数,没有函数名 lambda只是一个表达式,函数体比def简单的多 lambda的函数体不再是代码块 lambda只有一行,增加运行效率 lambda [参数1][参数2 ...

  7. 第一天 hello world 启程

    #include<stdio.h> int main() { printf(" Hello world"); return 0; }

  8. C++11多线程相关

    有关线程的知识,从C++11开始有了一些变化,作为初学者,对其先有个初步认识,后面用到的时候再详细剖析

  9. shark恒破解笔记6-摆脱NAG

    1.打开软件后,发现是未注册,然后点击关闭按钮,会弹出窗口 我们的目的就是为了能够去掉这个弹窗. 2.对这个程序进行查壳,没有什么发现 3.载入OD里面,F9运行起来,随后切换到程序主界面点击关闭按钮 ...

  10. luogu P3936 Coloring

    [返回模拟退火略解] 题目描述 在一个 n×mn\times mn×m 的矩阵中,每个点都染了一种颜色(只能是 [1,c][1,c][1,c] 中的一种),求一种方案,使得相邻异色点对数最小. Sol ...