RT,这太谔谔了,我不承认这是模拟赛

但是虽然是搬了三道题,题目本身也还能看,就这么着吧

(怎么机房里就我一道原题都没做过啊

T1 CF24D Broken Robot

比较简单地列出式子之后,我们发现可以自底向上每行做高斯消元求从每个格子出发的期望步数,复杂度$O(n^4)$(边界是最底下一行都是零)

然后我们发现高斯消元的时候每一行对应的方程就那几个地方有数,于是脚动高斯消元一下就可以$O(n^2)$了

  1. #pragma GCC optimize(2)
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=,mod=;
  7. int n,m,x,y,inv2,inv3,inv4,in2v,in3v,in4v,in23v,in34v;
  8. int dp[N][N],equ[N][N];
  9. template<class T,class TT> void Mis(TT &x,T y){x-=y; if(x<) x+=mod;}
  10. template<class T,class TT> int Mi(TT x,T y){x-=y; if(x<) x+=mod; return x;}
  11. void exGCD(int a,int b,int &x,int &y)
  12. {
  13. if(!b) x=,y=;
  14. else exGCD(b,a%b,y,x),y-=a/b*x;
  15. }
  16. int Inv(int x)
  17. {
  18. int xx,yy;
  19. exGCD(x,mod,xx,yy);
  20. return (xx%mod+mod)%mod;
  21. }
  22. void Pre()
  23. {
  24. inv2=Inv(),inv3=Inv(),inv4=Inv();
  25. in2v=mod-inv2,in3v=mod-inv3,in4v=mod-inv4;
  26. in23v=2ll*in3v%mod,in34v=3ll*in4v%mod;
  27. }
  28. void Init(int a)
  29. {
  30. if(m==)
  31. {
  32. equ[][]=in2v;
  33. equ[][m+]=Mi(1ll*dp[a+][]*in2v%mod,);
  34. }
  35. else
  36. {
  37. equ[][]=equ[m][m]=in23v;
  38. equ[][]=equ[m][m-]=inv3;
  39. equ[][m+]=Mi(1ll*dp[a+][]*in3v%mod,);
  40. equ[m][m+]=Mi(1ll*dp[a+][m]*in3v%mod,);
  41. for(int i=;i<m;i++)
  42. {
  43. equ[i][i-]=equ[i][i+]=inv4,equ[i][i]=in34v;
  44. equ[i][m+]=Mi(1ll*dp[a+][i]*in4v%mod,);
  45. }
  46. }
  47. }
  48. void Guass(int a)
  49. {
  50. register int i;
  51. for(i=;i<m;i++)
  52. {
  53. int calc=1ll*equ[i+][i]*Inv(equ[i][i])%mod;
  54. Mis(equ[i+][i],1ll*calc*equ[i][i]%mod);
  55. Mis(equ[i+][i+],1ll*calc*equ[i][i+]%mod);
  56. Mis(equ[i+][m+],1ll*calc*equ[i][m+]%mod);
  57. }
  58. dp[a][m]=1ll*equ[m][m+]*Inv(equ[m][m])%mod;
  59. for(i=m-;i;i--)
  60. dp[a][i]=1ll*Mi(equ[i][m+],1ll*dp[a][i+]*equ[i][i+]%mod)*Inv(equ[i][i])%mod;
  61. }
  62. int main()
  63. {
  64. register int i;
  65. scanf("%d%d%d%d",&n,&m,&x,&y),Pre();
  66. for(i=n-;i>=x;i--) Init(i),Guass(i);
  67. printf("%d",dp[x][y]);
  68. return ;
  69. }

T2 CEOI 2017 Building Bridges

花式优化DP

沙茶博主->CDQ+sort->$O(n\log^2 n)$

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define lli long long
  5. using namespace std;
  6. const int N=;
  7. int n,top,pos[N],stk[N];
  8. lli h[N],s[N],x[N],y[N],dp[N];
  9. void Maxi(lli &x,lli y){if(x<y) x=y;}
  10. void Mini(lli &x,lli y){if(x>y) x=y;}
  11. bool cmp(int a,int b)
  12. {
  13. return x[a]==x[b]?y[a]<y[b]:x[a]<x[b];
  14. }
  15. bool Slope(int a,int b,int c)
  16. {
  17. return (y[a]-y[c])*(x[b]-x[c])>=(y[b]-y[c])*(x[a]-x[c]);
  18. }
  19. lli Calc(int a,int b)
  20. {
  21. return -*h[b]*x[a]+y[a];
  22. }
  23. void CDQ(int l,int r)
  24. {
  25. if(l==r)
  26. x[l]=h[l],y[l]=dp[l]-s[l]+h[l]*h[l];
  27. else
  28. {
  29. int mid=(l+r)>>;
  30. CDQ(l,mid);
  31. sort(pos+l,pos++mid,cmp),top=;
  32. for(int i=l;i<=mid;i++)
  33. {
  34. while(top>&&Slope(pos[i],stk[top-],stk[top])) top--;
  35. stk[++top]=pos[i];
  36. }
  37. for(int i=mid+;i<=r;i++)
  38. {
  39. int ll=,rr=top-,re=top;
  40. while(ll<=rr)
  41. {
  42. int midd=(ll+rr)>>;
  43. if(Calc(stk[midd],i)<Calc(stk[midd+],i)) re=midd,rr=midd-;
  44. else ll=midd+;
  45. }
  46. Mini(dp[i],Calc(stk[re],i)+s[i-]+h[i]*h[i]);
  47. }
  48. CDQ(mid+,r);
  49. }
  50. }
  51. int main()
  52. {
  53. scanf("%d",&n);
  54. for(int i=;i<=n;i++) scanf("%lld",&h[i]);
  55. for(int i=;i<=n;i++) scanf("%lld",&s[i]);
  56. for(int i=;i<=n;i++) pos[i]=i,s[i]+=s[i-];
  57. memset(dp,0x3f,sizeof dp),dp[]=;
  58. CDQ(,n),printf("%lld",dp[n]);
  59. return ;
  60. }

T3 UOJ 310 黎明前的巧克力

拿全集作个差就是一道题了

我们要选出异或和相同的集合,等价于选出一个异或和为零的集合,然后拆成两个集合。所以可以设计一个朴素的DP:$dp[i][j]$表示考虑前$i$个数选出异或和为$j$的方案数。进一步我们发现这是在FWT,零的贡献是1,当前卷的数对一些位置贡献2,对一些位置贡献-2。又因为FWT是线性变换,所以最终卷出来是一坨1-2=-1和1+2=3。整体做一次FWT之后,解方程得到每个位置具体的-1和3的个数,然后IFWT回来

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define lli long long
  5. using namespace std;
  6. const int N=,mod=;
  7. int n,m,nm,rd,inv2,inv4;
  8. int bkt[N],res[N],fac[N],inv[N];
  9. void Maxi(int &x,int y){if(x<y) x=y;}
  10. int Qpow(int x,int k)
  11. {
  12. if(k==) return x;
  13. int tmp=Qpow(x,k/);
  14. return k%?1ll*tmp*tmp%mod*x%mod:1ll*tmp*tmp%mod;
  15. }
  16. int C(int a,int b)
  17. {
  18. return 1ll*fac[a]*inv[b]%mod*inv[a-b]%mod;
  19. }
  20. void Pre()
  21. {
  22. int lim=1e6;
  23. fac[]=inv[]=,nm=,inv2=Qpow(,mod-),inv4=Qpow(,mod-);
  24. for(int i=;i<=lim;i++) fac[i]=1ll*fac[i-]*i%mod;
  25. inv[lim]=pow(fac[lim],mod-);
  26. for(int i=lim-;i;i--) inv[i]=1ll*inv[i+]*(i+)%mod;
  27. }
  28. void Trans(int *arr,int tot,int typ)
  29. {
  30. register int i,j,k;
  31. for(i=;i<=tot;i<<=)
  32. {
  33. int len=i>>,tmp;
  34. for(j=;j<tot;j+=i)
  35. for(k=j;k<j+len;k++)
  36. tmp=arr[k+len],arr[k+len]=(arr[k]-tmp+mod)%mod,arr[k]=(arr[k]+tmp)%mod;
  37. if(typ==-)
  38. for(j=;j<tot;j++)
  39. arr[j]=1ll*arr[j]*inv2%mod;
  40. }
  41. }
  42. int main()
  43. {
  44. scanf("%d",&n),Pre();
  45. for(int i=;i<=n;i++)
  46. {
  47. scanf("%d",&rd);
  48. bkt[]++,bkt[rd]+=,Maxi(m,rd);
  49. }
  50. while(nm<=m) nm<<=;
  51. Trans(bkt,nm,);
  52. for(int i=;i<nm;i++)
  53. {
  54. int tmp=1ll*(n+bkt[i])*inv4%mod;
  55. res[i]=((tmp+n)%mod)%?mod-Qpow(,tmp):Qpow(,tmp);
  56. }
  57. Trans(res,nm,-);
  58. printf("%lld",1ll*(Qpow(,n)-res[]+mod)*Qpow(,mod-)%mod);
  59. return ;
  60. }

2019.3.16 noiac的原题模拟赛的更多相关文章

  1. NOIp2017真题模拟赛 By cellur925

    果然我还是最菜的==不接受反驳 (先考了day2喵喵喵) Day2 T1:奶酪 期望得分:100分 实际得分:100分 考察:并查集 思路:这题其实之前做过了==.思路还是比较清晰的,读入时预处理出可 ...

  2. NOIp 2015真题模拟赛 By cellur925

    果然我还是最菜的==不接受反驳== Day1 T1:神奇的幻方 思路:直接模拟即可,由于当前放法只与上一放法有关系,用两个变量记录一下即可.10分钟内切掉== 预计得分:100分 实际得分:100分 ...

  3. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  4. 2014-11-3 NOIP模拟赛2

    NOIP 2014 水题模拟赛 (请选手务必仔细阅读本页内容) 一.题目概况 中文题目名称 数列 刷漆 排队 英文题目与子目录名 seq paint layout 可执行文件名 seq paint l ...

  5. 更新 | 2019年9月计算机二级office模拟题库

    随着2019年上半年计算机二级考试的完美落幕,紧接着的便是9月份的考试了. 到目前为止,下半年9月份计算机二级考试报名开通时间在6月前后,现在也基本结束. 2019年9月(56次)全国计算机等级考试( ...

  6. [原题复现]ByteCTF 2019 –WEB- Boring-Code[无参数rce、绕过filter_var(),等]

    简介  原题复现:  考察知识点:无参数命令执行.绕过filter_var(), preg_match()  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使 ...

  7. [原题复现][CISCN 2019 初赛]WEB-Love Math(无参数RCE)[未完结]

    简介  原题复现:  考察知识点:无参数命令执行  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 源码审计 代码 1 ...

  8. [原题复现+审计][RoarCTF 2019]Easy Calc(http协议走私、php字符串解析漏洞)

    简介  原题复现:  考察知识点:http协议走私.php字符串解析漏洞  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到 ...

  9. [原题复现][极客大挑战 2019]BuyFlag

    简介  原题复现:[极客大挑战 2019]BuyFlag  考察知识点:php函数特性(is_numeric().strcmp函数())  线上平台:https://buuoj.cn(北京联合大学公开 ...

随机推荐

  1. 20155321 《网络对抗》 Exp6 信息搜集与漏洞扫描

    20155321 <网络对抗> Exp6 信息搜集与漏洞扫描 实验内容 信息搜集 whois 在kali终端输入whois 网址,查看注册的公司.服务.注册省份.传真.电话等信息 dig或 ...

  2. 四、MYSQL的数据类型

    类型选择原则 1.储存空间越少越好: 2.简单就好:例如整型比字符串更简单: 3.尽量避免null: 一.整数类型 1.有tinyint(8位).SMALLINT(16位).MEDIUMINT(24位 ...

  3. mfc CListBox

    通过ID操作对象 CListBox(列表框)控件 CListBox类常用成员 CListBox插入数据 CListBox删除数据 CListBox运用示例 一.CListBox类常用成员 CListB ...

  4. flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作

    flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...

  5. BYTE数组与16进制字符串互转

    //字节数组转换为HEX 字符串const string Byte2HexString(const unsigned char* input, const int datasize) { ]; ; j ...

  6. 华为手机自带浏览器不支持 ES6 语法

    原文地址:https://caochangkui.github.io/huawei-es6/ 华为手机自带浏览器对 es6 语法的支持度极差,哪怕最新的荣耀10 手机也有该毛病!所以,移动端项目开发中 ...

  7. 基于Vue手写一个下拉刷新

    当然不乏有很多下拉刷新的插件可以直接使用,但是自定义程度不强,大部分都只能改改文字,很难满足设计师的创意,譬如淘宝和京东首页那种效果,就需要自己花心思倒腾了,最近刚好有这种需求,做完了稍微总结一下,具 ...

  8. centos7 php性能调优

    php-ini优化 vi /etc/php.ini 打开php的安全模式,控制php执行危险函数, 默认是Off,改为On sql.safe_mode = Off 关闭php头部信息, 隐藏版本号, ...

  9. 计算机基础知识 一 Basic knowledge of computers One

    计算机硬件由CPU(Central Processing Unit).存储器.输入设备.输出设备组成. CPU通常由控制单元(控制器)和算数逻辑单元(运算器)组成. 运算器:负责进行算数运算和逻辑运算 ...

  10. python基础面试题

    函数1def foo(arg,li=[]): li.append(arg) return li list1 = foo(21) list2 = foo(11,[2]) list3 = foo(28) ...