HZOJ 20190818 NOIP模拟24题解
T1 字符串:
裸的卡特兰数题,考拉学长讲过的原题,就是bzoj3907网格那题,而且这题更简单,连高精都不用
结论$C_{n+m}^{n}-C_{n+m}^{n+1}$ 考场上10min切掉
#include<bits/stdc++.h>
#define int long long
const int mod=;
const int N=;
using namespace std;
int inv[N],fac[N];
int qpow(int a,int b){
int ans=;
while(b){
if(b&) ans=ans*a%mod;
b>>=;
a=a*a%mod;
}
return ans%mod;
}
int C(int n,int m){
return fac[n]%mod*inv[n-m]%mod*inv[m]%mod;
}
signed main(){
int n,m;
scanf("%lld%lld",&n,&m);
fac[]=;
for(int i=;i<=n+m;++i) fac[i]=fac[i-]*i%mod;
inv[m+n]=qpow(fac[m+n],mod-);
for(int i=m+n;i>=;--i) inv[i-]=inv[i]*i%mod;
//inv[0]=1;
//for(int i=1;i<=m+n;++i) cout<<i<<" "<<inv[i]<<endl;
int ans=(C(n+m,n)%mod-C(m+n,n+)%mod+mod)%mod;
printf("%lld",ans%mod);
}
T1
T2 乌鸦喝水:
貌似是这场考试最难的一题了吧,考场上由于忙着调T3没什么时间想,导致只打了个$O(mn^2)$的思博暴力,只拿了25pts,连$O(nm)$的暴力都没想,结果考试后3min就打出了50pts暴力,有点失误啊QAQ。
看到数据范围我们可以猜想这题正解复杂度应该在$O(nlog_2n)$的级别
首先肯定要枚举n,这就意味着我们要去掉m的枚举,我们考虑单独计算每个水桶的贡献,可以先计算出每个水桶最多能够被喝的次数,然后根据每个点被喝的次数sort一下,这样我们从前往后处理就是按照每个水桶被喝光的顺序扫描,我们记录一个res代表每个水桶的贡献,在计算每个点贡献时首先用那个点能够被喝的最多次数减去当前答案ans在除以当前还剩下的桶数,因为这一个水桶被喝了,所有的水桶水位都要相应下降,就相当与把剩下能够喝的次数,均摊到所有剩下的水桶,但是我们注意到他还可能有剩余,所以我们把余数与原序列在前面并且现在没扫到的桶数比较,如果余数大,则证明这桶水还有机会再被喝一次,否则不会在对答案产生贡献,至于如何找在它前面的数的数量用一个树状数组维护即可,然后这题细节还是比较多,细节还是看代码吧。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
int a[N],w[N];
struct node{
int maxn,id;
}wat[N];int n,m,x;
int tr[N];
bool cmp(node a,node b){
return (a.maxn==b.maxn)?a.id<b.id:a.maxn<b.maxn;
}
inline int lowbit(int x){return x&(-x);}
void add(int x,int val){
for(;x<=n;x+=lowbit(x)) tr[x]+=val;
}
int query(int x){
int ans=;
for(;x;x-=lowbit(x)) ans+=tr[x];
return ans;
}
int main(){
scanf("%d%d%d",&n,&m,&x);
for(int i=;i<=n;++i) scanf("%d",&w[i]);
for(int i=;i<=n;++i) scanf("%d",&a[i]);
for(int i=;i<=n;++i){
wat[i].maxn=(x-w[i])/a[i]+;
wat[i].id=i;
add(i,);
}
sort(wat+,wat+n+,cmp);
int ans=;
int cnt=n;
for(int i=;i<=n;++i){
add(wat[i].id,-);
if(wat[i].maxn<=) continue;
cnt=(wat[i].maxn-ans)/(n-i+);
if(cnt>=m){ans+=m;continue;}
if(query(wat[i].id)<(wat[i].maxn-ans)%(n-i+)) cnt++;
if(cnt>) ans+=cnt;
}
printf("%d",ans);
}
T2
T3 所驼门王的宝藏:
挺水的一道题,和NOIP模拟15 T2轰炸行动那题很像,只不过这题建图很难搞,数据范围很大$O(n^2)$暴力建图肯定被卡,然后我就在考场上想了半天怎么建图
,然而思博出题人根本没卡,真开(f××k)心(you)最后没时间了被迫瞎jb打了个暴力建图,然后又调了一年,才过了样例,然后就没时间想T2了,并且T3喜提10分的好成绩再次对思博出题人母亲表达慰问。
很简单,就直接tarjan缩点,在DAG上跑拓扑顺便更新答案即可。
正解建图是把同一行的横天门直接缩点,同一列的纵寰门直接所点,自you门暴力建
#include<bits/stdc++.h>
using namespace std;
const int N=;
struct node{
int x,y,opt;
}t[N];
int n,r,c;
int du[N];
int dx[]={-,-,-,,,,,},dy[]={-,,,-,,-,,};
int first[],nex[],to[],tot;
vector<int> vx[N*],vy[N*];
map<pair<int ,int> ,int> mp;
void add(int a,int b){
to[++tot]=b,nex[tot]=first[a],first[a]=tot;
}
int firstc[],nexc[],toc[],totc;
void add_c(int a,int b){
toc[++totc]=b,nexc[totc]=firstc[a],firstc[a]=totc;
}
void init(){
for(int i=;i<=n;++i){
if(t[i].opt==){
for(int j=;j<(int)vx[t[i].x].size();++j){
if(i==vx[t[i].x][j]) continue;
add(i,vx[t[i].x][j]);
}
}
else if(t[i].opt==){
for(int j=;j<(int)vy[t[i].y].size();++j){
if(i==vy[t[i].y][j]) continue;
add(i,vy[t[i].y][j]);
}
}
else{
for(int j=;j<;++j){
int nx=t[i].x+dx[j],ny=t[i].y+dy[j];
if(nx<=||ny<=||nx>r||ny>c) continue;
if(!mp[make_pair(nx,ny)]) continue;
add(i,mp[make_pair(nx,ny)]);
}
}
}
}
int dfn[],low[],ins[],top,sta[],res,big[],num,bl[];
void tarjan(int x){
dfn[x]=low[x]=++num;
ins[x]=,sta[++top]=x;
for(int i=first[x];i;i=nex[i]){
int y=to[i];
if(!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
}
else if(ins[y]) low[x]=min(low[x],dfn[y]);
}
if(dfn[x]==low[x]){
int y;
res++;
do{
y=sta[top--];
ins[y]=;
big[res]++;
bl[y]=res;
}while(x!=y);
}
}
queue<int> q;
int ans[];
void topo(){
for(int i=;i<=res;++i){
ans[i]=big[i];
if(!du[i]){
q.push(i);
}
}
while(q.size()){
int x=q.front();q.pop();
for(int i=firstc[x];i;i=nexc[i]){
int y=toc[i];
ans[y]=max(ans[y],ans[x]+big[y]);
du[y]--;
if(!du[y]) q.push(y);
}
}
}
signed main(){
scanf("%d%d%d",&n,&r,&c);
for(int i=;i<=n;++i){
scanf("%d%d%d",&t[i].x,&t[i].y,&t[i].opt);
mp[make_pair(t[i].x,t[i].y)]=i;
vx[t[i].x].push_back(i);
vy[t[i].y].push_back(i);
}
init();
for(int i=;i<=n;++i) if(!dfn[i]) tarjan(i);
for(int i=;i<=n;++i){
for(int j=first[i];j;j=nex[j]){
int y=to[j];
if(bl[y]==bl[i]) continue;
add_c(bl[i],bl[y]);
du[bl[y]]++;
}
}
topo();
int ansss=;
for(int i=;i<=res;++i) ansss=max(ansss,ans[i]);
printf("%d",ansss);
}
T3
HZOJ 20190818 NOIP模拟24题解的更多相关文章
- HZOJ 20190819 NOIP模拟26题解
考试过程: 照例开题,然后觉得三道题都挺难,比昨天难多了(flag×1),T1 dp?T2 数据结构? T3 dp?事实证明我是sb然后决定先搞T2,但是,woc,这题在说什么啊,我怎么看不懂题啊,连 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 「题解」NOIP模拟测试题解乱写I(29-31)
NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...
- HGOI NOIP模拟4 题解
NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...
- [NOIP模拟13]题解
A.矩阵游戏 其实挺水的? 考场上根本没有管出题人的疯狂暗示(诶这出题人有毛病吧这么简单的东西写一大堆柿子),而且推公式能力近乎没有,所以死掉了. 很显然乘法有交换率结合率所以操作顺序对最终结果没什么 ...
- 8.3 NOIP 模拟12题解
话说这次考试T1和T2是真的水,然而T1CE,T2TLE,T3CE 这不就是在侮辱我的智商啊!之前本机编译都是c++,以后要用c++11. 这次的T1就是一个大型找规律,我的规律都找出来了,但是竟然用 ...
- [NOIP模拟26]题解
今天的考试题改自闭了……所以滚来写陈年题解. A.*****贪婪***** RT,出题人告诉我们这题要贪心. 最优的策略一定是拖到必须断的时候再断开(虽然并不知道为什么). 如果一段序列满足题目中的性 ...
- [NOIP模拟25]题解
A.字符串 Catalan数不能再裸了 #include<cstdio> #include<iostream> #include<cstring> using na ...
随机推荐
- # Ubuntu子系统安装配置
目录 Ubuntu子系统安装配置 安装配置 终端美化 卸载 和win10之间的交互 Ubuntu子系统安装配置 亲测启动速度毫秒之间 安装配置 系统升级到一周年正式版及以上(1607) 依次在 设置 ...
- php 栈、 出栈、入栈
最近在面试的时候被问到栈,回来做个总结,希望对大家有帮助 栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压 ...
- DEDE调用列表页,前台titlelen显示不全问题解决
一. 问题描述:{dede:list titlelen='100'}标题长度设为100后,但前台调用显示最长却只有60. 二. 产生原因:经过我多度查找,最终导致标题显示不全的原因是在DEDE生数据库 ...
- [NOIP10.4模拟赛]3.z题解--思维
题目链接: 咕咕 闲扯: 哈哈这道T3考场上又敲了5个namespace,300+行,有了前车之鉴还对拍过,本以为子任务分稳了 结果只有30分哈哈,明明用极限数据对拍过不知怎么回事最后数据又是读不全, ...
- vue报类似警告Computed property "isLoading" was assigned to but it has no setter
一.原因:一个计算属性,当计算传入的是一个函数,或者传入的是一个对象,而没有设置 setter,也就是 set 属性,当你尝试直接该改变这个这个计算属性的值,都会报这个警告,vuex还会出现通过com ...
- wpf win10 popup位置偏移问题
同样问题参照: https://stackoverflow.com/questions/18113597/wpf-handedness-with-popups 解决方案: private static ...
- vue使用sass报Modele build failed: TypeError: this.getResolve is not a function at Object.loader...
项目中使用sass报错,之前一直使用同样的安装方式 cnpm install sass-loader node-sass -D,正常使用没问题,没想到这次同样的方式却报错了,网上查的原因是sass-l ...
- python初始化定长列表
>>> lst = ['x' for n in range(5)] >>> print(lst) ['x', 'x', 'x', 'x', 'x'] >> ...
- Webstorm2017.3.3软件的安装使用
下载 ▶进入jetbrains的官方网站点击download,即下载开始.官方网站链接:http://www.jetbrains.com/webstorm/ 安装 ▶双击刚下载完成的.exe文件开始进 ...
- 【loj#6220】sum
题目传送门:https://loj.ac/problem/6220 题意:对于一个序列$a$,找出它的一个子序列$b$,使$\sum_{a_i \in b}a_i \equiv 0 \pmod n$ ...