A

dddddd长链剖分与辣鸡 WOJWOJWOJ
代码:

#include<bits/stdc++.h>
#define ri register int
#define fi first
#define se second
#define pb push_back
using namespace std;
const int rlen=1<<18|1;
char buf[rlen],*ib=buf,*ob=buf;
#define gc() (((ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin)),ib==ob)?-1:*ib++)
typedef pair<int,int> pii;
typedef long long ll;
inline int read(){int ans=0;char ch=gc();while(!isdigit(ch))ch=gc();while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();return ans;
}
const int mod=998244353;
inline int add(int a,int b){return (a+=b)<mod?a:a-mod;}
inline int dec(int a,int b){return (a-=b)<0?a+mod:a;}
inline int mul(int a,int b){return (ll)a*b%mod;}
inline void Add(int&a,int b){(a+=b)<mod?a:(a-=mod);}
inline void Dec(int&a,int b){(a-=b)<0?(a+=mod):a;}
inline void Mul(int&a,int b){a=(ll)a*b%mod;}
inline int ksm(int a,int p){int ret=1;for(;p;p>>=1,Mul(a,a))if(p&1)Mul(ret,a);return ret;}
const int N=1e6+5;
namespace sgt{#define lc (p<<1)#define rc (p<<1|1)#define mid (l+r>>1)ll mx[N<<2],add[N<<2];inline void pushnow(int p,ll v){add[p]+=v,mx[p]+=v;}inline void pushdown(int p){(add[p])&&(pushnow(lc,add[p]),pushnow(rc,add[p]),add[p]=0);}inline void update(int p,int l,int r,int k,ll v){if(l==r){mx[p]=max(mx[p],v);return;}pushdown(p);k<=mid?update(lc,l,mid,k,v):update(rc,mid+1,r,k,v);mx[p]=max(mx[lc],mx[rc]);}inline void modify(int p,int l,int r,int ql,int qr,ll v){if(ql<=l&&r<=qr)return pushnow(p,v);pushdown(p);if(qr<=mid)modify(lc,l,mid,ql,qr,v);else if(ql>mid)modify(rc,mid+1,r,ql,qr,v);else modify(lc,l,mid,ql,qr,v),modify(rc,mid+1,r,ql,qr,v);mx[p]=max(mx[lc],mx[rc]);}inline ll query(int p,int l,int r,int ql,int qr){if(ql<=l&&r<=qr)return mx[p];pushdown(p);if(qr<=mid)return query(lc,l,mid,ql,qr);else if(ql>mid)return query(rc,mid+1,r,ql,qr);return max(query(lc,l,mid,ql,qr),query(rc,mid+1,r,ql,qr));}#undef lc#undef rc#undef mid
}
inline void ckmax(ll&a,ll b){a=a>b?a:b;}
int n,fa[N],dep[N],mxdep[N],hson[N],len[N],L[N],R[N];
ll ans[N];
int pred[N],num[N],tot=0;
vector<pii>e[N];
void dfs1(int p){mxdep[p]=dep[p];for(ri i=0,v;i<e[p].size();++i){dep[v=e[p][i].fi]=dep[p]+1,dfs1(v),mxdep[p]=max(mxdep[p],mxdep[v]);if(mxdep[p]==mxdep[v])hson[p]=v;}len[p]=mxdep[p]-dep[p];
}
void dfs2(int p){pred[num[p]=++tot]=p;if(!hson[p])return;dfs2(hson[p]);for(ri i=0,v;i<e[p].size();++i)if((v=e[p][i].fi)!=hson[p])dfs2(v);
}
void dfs3(int p){if(!hson[p])return;if(hson[p])dfs3(hson[p]);for(ri i=0;i<e[p].size();++i)if(e[p][i].fi==hson[p])sgt::modify(1,1,n,num[p]+1,num[p]+len[p],e[p][i].se);ll upd;for(ri i=0,v;i<e[p].size();++i){if((v=e[p][i].fi)==hson[p])continue;dfs3(v);for(ri j=0;j<=len[v];++j){upd=sgt::query(1,1,n,num[v]+j,num[v]+j)+e[p][i].se;if(L[p]<=j+1+len[p]&&j+1<=R[p])ans[p]=max(ans[p],upd+sgt::query(1,1,n,num[p]+max(0,L[p]-j-1),num[p]+min(len[p],R[p]-j-1)));}for(ri j=0;j<=len[v];++j){upd=sgt::query(1,1,n,num[v]+j,num[v]+j)+e[p][i].se;sgt::update(1,1,n,num[p]+j+1,upd);}}if(len[p]>=L[p])ckmax(ans[p],sgt::query(1,1,n,num[p]+L[p],num[p]+min(R[p],len[p])));
}
int main(){int size=100<<20;//40M__asm__ ("movq %0,%%rsp\n"::"r"((char*)malloc(size)+size));//提交用这个 n=read();for(ri i=1;i<=n;++i)L[i]=read(),R[i]=read(),ans[i]=-1;for(ri i=2;i<=n;++i)fa[i]=read(),e[fa[i]].pb(pii(i,read()));dep[1]=1,dfs1(1),dfs2(1);dfs3(1);int res=0;for(ri i=n,mt=1;i;--i,Mul(mt,23333))Add(res,mul(mt,(ans[i]%mod+mod)%mod));cout<<res;exit(0);
}

B

三道题里面最容易的一道
dddddd 仙人掌 dpdpdp 与辣鸡标算,直接考虑对每个环分别 dpdpdp 即可
代码:

#include<bits/stdc++.h>
#define ri register int
#define fi first
#define se second
#define pb push_back
using namespace std;
const int rlen=1<<18|1;
char buf[rlen],*ib=buf,*ob=buf;
#define gc() (((ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin)),ib==ob)?-1:*ib++)
typedef pair<int,int> pii;
typedef long long ll;
inline int read(){int ans=0;char ch=gc();while(!isdigit(ch))ch=gc();while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();return ans;
}
const int mod=998244353;
inline int add(int a,int b){return (a+=b)<mod?a:a-mod;}
inline int dec(int a,int b){return (a-=b)<0?a+mod:a;}
inline int mul(int a,int b){return (ll)a*b%mod;}
inline void Add(int&a,int b){(a+=b)<mod?a:(a-=mod);}
inline void Dec(int&a,int b){(a-=b)<0?(a+=mod):a;}
inline void Mul(int&a,int b){a=(ll)a*b%mod;}
inline int ksm(int a,int p){int ret=1;for(;p;p>>=1,Mul(a,a))if(p&1)Mul(ret,a);return ret;}
const int N=1e6+5;
namespace sgt{#define lc (p<<1)#define rc (p<<1|1)#define mid (l+r>>1)ll mx[N<<2],add[N<<2];inline void pushnow(int p,ll v){add[p]+=v,mx[p]+=v;}inline void pushdown(int p){(add[p])&&(pushnow(lc,add[p]),pushnow(rc,add[p]),add[p]=0);}inline void update(int p,int l,int r,int k,ll v){if(l==r){mx[p]=max(mx[p],v);return;}pushdown(p);k<=mid?update(lc,l,mid,k,v):update(rc,mid+1,r,k,v);mx[p]=max(mx[lc],mx[rc]);}inline void modify(int p,int l,int r,int ql,int qr,ll v){if(ql<=l&&r<=qr)return pushnow(p,v);pushdown(p);if(qr<=mid)modify(lc,l,mid,ql,qr,v);else if(ql>mid)modify(rc,mid+1,r,ql,qr,v);else modify(lc,l,mid,ql,qr,v),modify(rc,mid+1,r,ql,qr,v);mx[p]=max(mx[lc],mx[rc]);}inline ll query(int p,int l,int r,int ql,int qr){if(ql<=l&&r<=qr)return mx[p];pushdown(p);if(qr<=mid)return query(lc,l,mid,ql,qr);else if(ql>mid)return query(rc,mid+1,r,ql,qr);return max(query(lc,l,mid,ql,qr),query(rc,mid+1,r,ql,qr));}#undef lc#undef rc#undef mid
}
inline void ckmax(ll&a,ll b){a=a>b?a:b;}
int n,fa[N],dep[N],mxdep[N],hson[N],len[N],L[N],R[N];
ll ans[N];
int pred[N],num[N],tot=0;
vector<pii>e[N];
void dfs1(int p){mxdep[p]=dep[p];for(ri i=0,v;i<e[p].size();++i){dep[v=e[p][i].fi]=dep[p]+1,dfs1(v),mxdep[p]=max(mxdep[p],mxdep[v]);if(mxdep[p]==mxdep[v])hson[p]=v;}len[p]=mxdep[p]-dep[p];
}
void dfs2(int p){pred[num[p]=++tot]=p;if(!hson[p])return;dfs2(hson[p]);for(ri i=0,v;i<e[p].size();++i)if((v=e[p][i].fi)!=hson[p])dfs2(v);
}
void dfs3(int p){if(!hson[p])return;if(hson[p])dfs3(hson[p]);for(ri i=0;i<e[p].size();++i)if(e[p][i].fi==hson[p])sgt::modify(1,1,n,num[p]+1,num[p]+len[p],e[p][i].se);ll upd;for(ri i=0,v;i<e[p].size();++i){if((v=e[p][i].fi)==hson[p])continue;dfs3(v);for(ri j=0;j<=len[v];++j){upd=sgt::query(1,1,n,num[v]+j,num[v]+j)+e[p][i].se;if(L[p]<=j+1+len[p]&&j+1<=R[p])ans[p]=max(ans[p],upd+sgt::query(1,1,n,num[p]+max(0,L[p]-j-1),num[p]+min(len[p],R[p]-j-1)));}for(ri j=0;j<=len[v];++j){upd=sgt::query(1,1,n,num[v]+j,num[v]+j)+e[p][i].se;sgt::update(1,1,n,num[p]+j+1,upd);}}if(len[p]>=L[p])ckmax(ans[p],sgt::query(1,1,n,num[p]+L[p],num[p]+min(R[p],len[p])));
}
int main(){n=read();for(ri i=1;i<=n;++i)L[i]=read(),R[i]=read(),ans[i]=-1;for(ri i=2;i<=n;++i)fa[i]=read(),e[fa[i]].pb(pii(i,read()));dep[1]=1,dfs1(1),dfs2(1);dfs3(1);int res=0;for(ri i=n,mt=1;i;--i,Mul(mt,23333))Add(res,mul(mt,(ans[i]%mod+mod)%mod));cout<<res;exit(0);
}

C

在听了拥有 6,76,76,7 个后宫(亲口说出),每天切 infinfinf 道神题并且天天假自己爆零的数论之神 B.SB.SB.S 的讲解之后终于会了
其实就是化成 c,d,pc,d,pc,d,p 两两都互质的情况然后就能类欧几里得转化了
代码:

#include<bits/stdc++.h>
#define ri register int
#define pb push_back
using namespace std;
const int rlen=1<<18|1;
char buf[rlen],*ib=buf,*ob=buf;
#define gc() (((ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin)),ib==ob)?-1:*ib++)
typedef long long ll;
inline int read(){int ans=0;char ch=gc();while(!isdigit(ch))ch=gc();while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();return ans;
}
const int mogic=6e6+5;
struct Hash_table{vector<int>ori[mogic],vl[mogic];inline void insert(int x,int v){int t=x%mogic;ori[t].pb(x),vl[t].pb(v);}inline int query(int x){for(ri t=x%mogic,i=ori[t].size()-1;~i;--i)if(ori[t][i]==x)return vl[t][i];return -1;}
}S;
int mod,P,g;
inline int add(int a,int b){return (a+=b)<mod?a:a-mod;}
inline int dec(int a,int b){return (a-=b)<0?a+mod:a;}
inline int mul(int a,int b){return (ll)a*b%mod;}
inline void Add(int &a,int b){(a+=b)<mod?0:a-=mod;}
inline void Dec(int &a,int b){(a-=b)<0?a+=mod:0;}
inline void Mul(int &a,int b){a=(ll)a*b%mod;}
inline int ksm(int a,int b,int res=1){for(;b;b>>=1,Mul(a,a))(b&1)&&(Mul(res,a),1);return res;}
inline int Inv(int x){return ksm(x,mod-2);}
int blo,V=1;
inline void init(){for(ri i=0;i<blo;i++)S.insert(V,i),Mul(V,g);}
inline int solve(int k){k=Inv(k);for(ri t,i=0;i<blo;i++,Mul(k,V))if(~(t=S.query(k)))return ((ll)(i*blo-t)%P+P)%P;}
int pr[1005],tot,n;
inline bool check(int k){for(ri i=1,phi=mod-1;i<=tot;i++)if(ksm(k,phi/pr[i])==1)return 1;return 0;}
inline void find_g(int phi=mod-1){for(ri i=2;i*i<=phi;i++){if(phi==1)break;if(phi!=phi/i*i)continue;pr[++tot]=i;while(phi==phi/i*i)phi/=i;}if(phi^1)pr[++tot]=phi;g=2;while(check(g))++g;
}
inline void exgcd(ll &x,ll &y,ll a,ll b){if(!b){x=1,y=0;return;}exgcd(y,x,b,a%b),y-=a/b*x;}
inline ll Inv2(ll t,ll x=0,ll y=0){return exgcd(x,y,t,P),(x%P+P)%P;}
inline ll gcd(ll a,ll b,ll t=0){while(b)t=a,a=b,b=t-t/a*a;return a;}
const ll inf=1e18;
inline ll f(int l,int r,ll a,ll b,ll c,ll d,ll e){if(l>r)return inf;ll L=(c*l+d)/e,R=(c*r+d)/e;if(L==R)return min(a*l,a*r)+b*R;if(c>=e)return f(l,r,a+b*(c/e),b,c%e,d,e);if(a>=0)return min(a*l+b*L,f(L+1,R,b,a,e,c-d-1,c));return min(a*r+b*R,f(L,R-1,b,a,e,e-d-1,c));
}
int main(){#ifdef ldxcaicaifreopen("lx.in","r",stdin);#endifmod=read(),P=mod-1,n=read();blo=sqrt((ll)n*mod)+1;find_g();init();for(ll g,a,b,c,d;n;--n){a=read(),b=read(),c=read()%mod,d=read()%mod;P=mod-1;if(!c||!d){puts("Damn it");continue;}c=solve(c),d=solve(d),g=gcd(gcd(c,d),P),c/=g,d/=g,P/=g;g=gcd(c,P),c/=g,P/=g,b*=g;c&&(d=(ll)d*Inv2(c)%P);g=gcd(d,P),a*=g,d/=g,P/=g;cout<<min((ll)P*(a+b),f(1,P-1,(ll)a*d+b,-a*P,d,0,P))<<'\n';}return 0;
}

190911 CSP-S 2019模拟相关推荐

  1. CCCC/PTA 2019模拟赛 L3-3 至多删三个字符

    这篇博文是本蒟蒻第一次写CSDN博客. 旨在熟悉一下CSDN博客的使用方式. 写的不好,各位客官见笑了 本篇写的题是今年4月份(具体时间记不清了)的一次模拟赛的L3-3 现在是PTA的CCCC练习集中 ...

  2. 190831 CSP-S 2019 模拟

    A 辣鸡 stdstdstd 不知道你想表达些啥非要多写个没用的函数还把复杂度上界算错了 这题做法trival,写起来去世 考虑到没有最后一个询问就是常规吉司机线段树,现在我们构造一个 Ci=Ai−B ...

  3. 190822 CSP-S 2019 模拟

    A 艹居然被卡常了,100->50 这貌似是原题的加强版 加个hash乱搞一下就能过了 代码: #include<bits/stdc++.h> #define ri register ...

  4. 信息学奥林匹克c语言提高组,CSP信息学奥赛提高组一级全攻略,你值得拥有!...

    12月15日,中国计算机学会CCF的软件能力职业考试--CSP的本年度第三次认证顺利结束.这是一个面向全国计算机相关专业大学毕业生的软件能力的考试,该项认证每年大约3.9.12月各举办一次,自2014 ...

  5. 2019 CSP-J1 CSP-S1 第1轮 初赛 答案解析及总结、视频等

    CSP-J 计算机结构与组成(一) dllglvzhenfeng的个人空间_哔哩哔哩_Bilibili CSP-J 计算机结构与组成(二) dllglvzhenfeng的个人空间_哔哩哔哩_Bilib ...

  6. 太原理工大学ICPC队介绍(2019版)

    高中的生活成为记忆,虽然依旧念念不舍: 梦想缠绕,心怀憧憬,淡淡的忧思,满心的期待是大学: 未来四年,用什么来填充? 新旅程将发生什么? 考虑一下太原理工大学,考虑一下成为程序员的理想. 太原理工大学 ...

  7. CSP-J CSP-S初赛相关知识汇总

    [计算机科学速成课][40集全/精校] - Crash Course Computer Science [计算机科学速成课][40集全/精校] - Crash Course Computer Scie ...

  8. 2022年 CSP-J1 CSP-S1 初赛 如何进行复习 如何做题

    第一题 单选题: 这个包含了2018年及以前年份的的单选或不定项选择(提高组 初赛) 以及问题求解题等考点 这一部分建议直接做历年的真题就可以了,至少要做最近的5年真题 做题的顺序:由最近往前做,也就 ...

  9. 信息学奥林匹克c语言提高组,信息学奥赛提高组一级全攻略!你值得拥有!

    12月15日,中国计算机学会CCF的软件能力职业考试--CSP的本年度第三次认证顺利结束.这是一个面向全国计算机相关专业大学毕业生的软件能力的考试,该项认证每年大约3.9.12月各举办一次,自2014 ...

最新文章

  1. html酒鬼酒网站制作,酒鬼酒
  2. intellij idea 配置远程访问本地的tomcat项目
  3. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)...
  4. python教程是什么-python运行环境是什么
  5. Mysql错误代码大全
  6. 【2011-04-06】SQL Server 2000 日志传送搭建
  7. Bash Shell学习笔记二
  8. strace调试(Linux Device Driver)
  9. 王者非法进入服务器维护封号,王者荣耀哪些行为会被封号 违规封号行为汇总...
  10. ajax上传图片并显示,Ajax实现图片上传并预览
  11. CRM 客户端程序开发:设置实体表单界面字段的值
  12. JavaScript - 测试 jQuery
  13. 硬件WAF的制作!linux系统制作硬件WAF,实现透明代理,具备断电、故障Bypass功能。...
  14. C语言两个数比较大小和三个数比较大小,代码
  15. 绘图工具 Gliffy 使用简介
  16. xci转nsp工具_【ns新系统11.0.0发布】安装工具已经更新至4.2【后面附上批处理内容修改】...
  17. android请求网络接口(xutils3进行网络请求)
  18. 非银行支付机构网络支付业务管理办法
  19. mysql日期转换12小时和24小时_12小时制和24小时制的转换(转)
  20. Lenovo系列问题第四期

热门文章

  1. 管理类联考——数学——记忆篇——公式=文字编码=联想
  2. 己烯共聚物线性低密度聚乙烯(C6-LLDPE)行业调研报告 - 市场现状分析与发展前景预测
  3. 数字延时脉冲发生器DG645 技术参数
  4. Pandas-时间序列(三)-重采样:改变TimeSeries的采样频率【降采样:高频数据 → 低频数据(以天为频率转为以月为频率)】【升采样:低频数据 → 高频数据(以年为频率转为以月为频率)】
  5. popper.min.js.map
  6. 戴尔服务器怎么安装win7系统,戴尔OptiPlex XE3 怎么装win7系统的图文教程
  7. 亚马逊10000人大裁员今启动!谷歌绩效强制打低分跟风「毕业潮」
  8. 解决python -m pip install --upgrade pip 升级不成功问题
  9. java程序员 女装_java程序员面试着装要求
  10. WindowBlinds 6 下载 破解 (新)