2019.3.16 noiac的原题模拟赛
RT,这太谔谔了,我不承认这是模拟赛
但是虽然是搬了三道题,题目本身也还能看,就这么着吧
(怎么机房里就我一道原题都没做过啊
T1 CF24D Broken Robot
比较简单地列出式子之后,我们发现可以自底向上每行做高斯消元求从每个格子出发的期望步数,复杂度$O(n^4)$(边界是最底下一行都是零)
然后我们发现高斯消元的时候每一行对应的方程就那几个地方有数,于是脚动高斯消元一下就可以$O(n^2)$了
#pragma GCC optimize(2)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,mod=;
int n,m,x,y,inv2,inv3,inv4,in2v,in3v,in4v,in23v,in34v;
int dp[N][N],equ[N][N];
template<class T,class TT> void Mis(TT &x,T y){x-=y; if(x<) x+=mod;}
template<class T,class TT> int Mi(TT x,T y){x-=y; if(x<) x+=mod; return x;}
void exGCD(int a,int b,int &x,int &y)
{
if(!b) x=,y=;
else exGCD(b,a%b,y,x),y-=a/b*x;
}
int Inv(int x)
{
int xx,yy;
exGCD(x,mod,xx,yy);
return (xx%mod+mod)%mod;
}
void Pre()
{
inv2=Inv(),inv3=Inv(),inv4=Inv();
in2v=mod-inv2,in3v=mod-inv3,in4v=mod-inv4;
in23v=2ll*in3v%mod,in34v=3ll*in4v%mod;
}
void Init(int a)
{
if(m==)
{
equ[][]=in2v;
equ[][m+]=Mi(1ll*dp[a+][]*in2v%mod,);
}
else
{
equ[][]=equ[m][m]=in23v;
equ[][]=equ[m][m-]=inv3;
equ[][m+]=Mi(1ll*dp[a+][]*in3v%mod,);
equ[m][m+]=Mi(1ll*dp[a+][m]*in3v%mod,);
for(int i=;i<m;i++)
{
equ[i][i-]=equ[i][i+]=inv4,equ[i][i]=in34v;
equ[i][m+]=Mi(1ll*dp[a+][i]*in4v%mod,);
}
}
}
void Guass(int a)
{
register int i;
for(i=;i<m;i++)
{
int calc=1ll*equ[i+][i]*Inv(equ[i][i])%mod;
Mis(equ[i+][i],1ll*calc*equ[i][i]%mod);
Mis(equ[i+][i+],1ll*calc*equ[i][i+]%mod);
Mis(equ[i+][m+],1ll*calc*equ[i][m+]%mod);
}
dp[a][m]=1ll*equ[m][m+]*Inv(equ[m][m])%mod;
for(i=m-;i;i--)
dp[a][i]=1ll*Mi(equ[i][m+],1ll*dp[a][i+]*equ[i][i+]%mod)*Inv(equ[i][i])%mod;
}
int main()
{
register int i;
scanf("%d%d%d%d",&n,&m,&x,&y),Pre();
for(i=n-;i>=x;i--) Init(i),Guass(i);
printf("%d",dp[x][y]);
return ;
}
T2 CEOI 2017 Building Bridges
花式优化DP
沙茶博主->CDQ+sort->$O(n\log^2 n)$
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lli long long
using namespace std;
const int N=;
int n,top,pos[N],stk[N];
lli h[N],s[N],x[N],y[N],dp[N];
void Maxi(lli &x,lli y){if(x<y) x=y;}
void Mini(lli &x,lli y){if(x>y) x=y;}
bool cmp(int a,int b)
{
return x[a]==x[b]?y[a]<y[b]:x[a]<x[b];
}
bool Slope(int a,int b,int c)
{
return (y[a]-y[c])*(x[b]-x[c])>=(y[b]-y[c])*(x[a]-x[c]);
}
lli Calc(int a,int b)
{
return -*h[b]*x[a]+y[a];
}
void CDQ(int l,int r)
{
if(l==r)
x[l]=h[l],y[l]=dp[l]-s[l]+h[l]*h[l];
else
{
int mid=(l+r)>>;
CDQ(l,mid);
sort(pos+l,pos++mid,cmp),top=;
for(int i=l;i<=mid;i++)
{
while(top>&&Slope(pos[i],stk[top-],stk[top])) top--;
stk[++top]=pos[i];
}
for(int i=mid+;i<=r;i++)
{
int ll=,rr=top-,re=top;
while(ll<=rr)
{
int midd=(ll+rr)>>;
if(Calc(stk[midd],i)<Calc(stk[midd+],i)) re=midd,rr=midd-;
else ll=midd+;
}
Mini(dp[i],Calc(stk[re],i)+s[i-]+h[i]*h[i]);
}
CDQ(mid+,r);
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%lld",&h[i]);
for(int i=;i<=n;i++) scanf("%lld",&s[i]);
for(int i=;i<=n;i++) pos[i]=i,s[i]+=s[i-];
memset(dp,0x3f,sizeof dp),dp[]=;
CDQ(,n),printf("%lld",dp[n]);
return ;
}
T3 UOJ 310 黎明前的巧克力
拿全集作个差就是一道题了
我们要选出异或和相同的集合,等价于选出一个异或和为零的集合,然后拆成两个集合。所以可以设计一个朴素的DP:$dp[i][j]$表示考虑前$i$个数选出异或和为$j$的方案数。进一步我们发现这是在FWT,零的贡献是1,当前卷的数对一些位置贡献2,对一些位置贡献-2。又因为FWT是线性变换,所以最终卷出来是一坨1-2=-1和1+2=3。整体做一次FWT之后,解方程得到每个位置具体的-1和3的个数,然后IFWT回来
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lli long long
using namespace std;
const int N=,mod=;
int n,m,nm,rd,inv2,inv4;
int bkt[N],res[N],fac[N],inv[N];
void Maxi(int &x,int y){if(x<y) x=y;}
int Qpow(int x,int k)
{
if(k==) return x;
int tmp=Qpow(x,k/);
return k%?1ll*tmp*tmp%mod*x%mod:1ll*tmp*tmp%mod;
}
int C(int a,int b)
{
return 1ll*fac[a]*inv[b]%mod*inv[a-b]%mod;
}
void Pre()
{
int lim=1e6;
fac[]=inv[]=,nm=,inv2=Qpow(,mod-),inv4=Qpow(,mod-);
for(int i=;i<=lim;i++) fac[i]=1ll*fac[i-]*i%mod;
inv[lim]=pow(fac[lim],mod-);
for(int i=lim-;i;i--) inv[i]=1ll*inv[i+]*(i+)%mod;
}
void Trans(int *arr,int tot,int typ)
{
register int i,j,k;
for(i=;i<=tot;i<<=)
{
int len=i>>,tmp;
for(j=;j<tot;j+=i)
for(k=j;k<j+len;k++)
tmp=arr[k+len],arr[k+len]=(arr[k]-tmp+mod)%mod,arr[k]=(arr[k]+tmp)%mod;
if(typ==-)
for(j=;j<tot;j++)
arr[j]=1ll*arr[j]*inv2%mod;
}
}
int main()
{
scanf("%d",&n),Pre();
for(int i=;i<=n;i++)
{
scanf("%d",&rd);
bkt[]++,bkt[rd]+=,Maxi(m,rd);
}
while(nm<=m) nm<<=;
Trans(bkt,nm,);
for(int i=;i<nm;i++)
{
int tmp=1ll*(n+bkt[i])*inv4%mod;
res[i]=((tmp+n)%mod)%?mod-Qpow(,tmp):Qpow(,tmp);
}
Trans(res,nm,-);
printf("%lld",1ll*(Qpow(,n)-res[]+mod)*Qpow(,mod-)%mod);
return ;
}
2019.3.16 noiac的原题模拟赛的更多相关文章
- NOIp2017真题模拟赛 By cellur925
果然我还是最菜的==不接受反驳 (先考了day2喵喵喵) Day2 T1:奶酪 期望得分:100分 实际得分:100分 考察:并查集 思路:这题其实之前做过了==.思路还是比较清晰的,读入时预处理出可 ...
- NOIp 2015真题模拟赛 By cellur925
果然我还是最菜的==不接受反驳== Day1 T1:神奇的幻方 思路:直接模拟即可,由于当前放法只与上一放法有关系,用两个变量记录一下即可.10分钟内切掉== 预计得分:100分 实际得分:100分 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 2014-11-3 NOIP模拟赛2
NOIP 2014 水题模拟赛 (请选手务必仔细阅读本页内容) 一.题目概况 中文题目名称 数列 刷漆 排队 英文题目与子目录名 seq paint layout 可执行文件名 seq paint l ...
- 更新 | 2019年9月计算机二级office模拟题库
随着2019年上半年计算机二级考试的完美落幕,紧接着的便是9月份的考试了. 到目前为止,下半年9月份计算机二级考试报名开通时间在6月前后,现在也基本结束. 2019年9月(56次)全国计算机等级考试( ...
- [原题复现]ByteCTF 2019 –WEB- Boring-Code[无参数rce、绕过filter_var(),等]
简介 原题复现: 考察知识点:无参数命令执行.绕过filter_var(), preg_match() 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使 ...
- [原题复现][CISCN 2019 初赛]WEB-Love Math(无参数RCE)[未完结]
简介 原题复现: 考察知识点:无参数命令执行 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 源码审计 代码 1 ...
- [原题复现+审计][RoarCTF 2019]Easy Calc(http协议走私、php字符串解析漏洞)
简介 原题复现: 考察知识点:http协议走私.php字符串解析漏洞 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到 ...
- [原题复现][极客大挑战 2019]BuyFlag
简介 原题复现:[极客大挑战 2019]BuyFlag 考察知识点:php函数特性(is_numeric().strcmp函数()) 线上平台:https://buuoj.cn(北京联合大学公开 ...
随机推荐
- 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合
前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...
- Android APK 签名比对(转)
Android apk签名的过程 1. 生成MANIFEST.MF文件: 程序遍历update.apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个生成SHA1的数字签名信息,再用Ba ...
- 20155330 《网络攻防》Exp1 PC平台逆向破解(5)M
20155330 <网络攻防>Exp1 PC平台逆向破解(5)M 实践目标 运行pwn1可执行文件中的getshell函数,学习如何注入运行任何Shellcode 本次实践的对象是一个名为 ...
- EZ 2018 04 01 ZJOI2018模拟赛04.01
现在开始填以前的坑 这次老叶强制我们打一下这次省选题,然后我已经做好了掉Rating到死的准备 然后考完--莫名涨了 Orz 题目链接 由于很多东西我都不会,所以详细请看:dalao的题解 T1 我T ...
- Centos7下不删除python2.x的情况下安装python3.x
Linux下默认系统自带python2.X的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装py ...
- CS100.1x-lab4_machine_learning_student
这是这门课第一次接触机器学习,主题是Predicting Movie Ratings.难度比上一次作业要简单点..上一次作业真的挺难...相关ipynb文件见我github. 这里我们会用到Spark ...
- 前端页面loading效果(CSS实现)
当首页内容或图片比较多时,加载时间会比较长,此时可能出现页面白屏的情况,用户体验较差.所以,在页面完全加载出来之前,可以考虑加入loading效果,当页面完全加载完后,是loading消失即可. 1. ...
- mysql基础(二)—— 简单sql
查询 select * from company select c.code from company c; select m.bookname from myview m; (myview为视图) ...
- 程序员大佬推荐的java学习路线
作为我的第一篇博客,我第一个想到的就是在校时就看到的这篇文章.并且在之后的时间里自己都反复观看过,有时候这不单单是一篇学习路线,也是审视自己技术能力的里程碑,和激励自己的鞭挞绳. 先来个书籍清单: & ...
- centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)
写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用. 当然,在真实的产线环境中需要分析的数据和难度远远高于demo所示,所以demo的作用也仅仅只能起到介绍工具的作用. ...