上午考了一套sb题,但是没有人AK。李巨290虐场。

下午又考了一套sb题,李巨AK虐场。%%%

T1 %

中国剩余定理好像做不了啊,我一直在想如何用CRT做,然后就GG了。

然而正解是bike当初说的“CRT根本没用啊你每次合并两个数就可以了”然而这玩意似乎就叫做EXCRT。

洛谷模板传送门

考虑合并

x=y mod P

x=bi mod ai

k1*P+y=k2*ai+bi

k1*P+k3*ai=bi-y

exgcd解同余方程,得到一个解,从而得到k1的最小整数解。

x=x+k1*P

P=lcm(P,ai)

洛谷这道题要写快速乘

这道t1相当于是k1是暴力从小到大枚举的,lcm(p1~pi)=p1*p2*……pi,与p(i+1)互质,k最多枚举到i。P和x都很大不需要记下来,只需要记录它们模每个a和每个b的结果即可。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int up=,N=;
typedef unsigned long long LL;
typedef double db;
using namespace std;
int n,m;
int a[N],b[N]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int bo[up+],p[up+];
void get_prime() {
for(int i=;i<=up;i++) {
if(!bo[i]) p[++p[]]=i;
for(int j=;j<=p[]&&p[j]*i<=up;j++) {
bo[i*p[j]]=;
if(i%p[j]==) break;
}
}
} struct ct {
int ma[N],mb[N];
friend ct operator +(const ct &A,const ct &B) {
ct rs;
For(i,,n) rs.ma[i]=(A.ma[i]+B.ma[i])%p[i];
For(i,,m) rs.mb[i]=((LL)A.mb[i]+B.mb[i])%b[i];
return rs;
}
friend ct operator *(const ct &A,const int &B) {
ct rs;
For(i,,n) rs.ma[i]=A.ma[i]*B%p[i];
For(i,,m) rs.mb[i]=(LL)A.mb[i]*B%b[i];
return rs;
}
}bs,rs; #define ANS
int main() {
#ifdef ANS
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
#endif
get_prime();
read(n); read(m);
For(i,,n) read(a[i]);
For(i,,m) read(b[i]);
For(i,,n) bs.ma[i]=,rs.ma[i]=; // rs=0 bs=1
For(i,,m) bs.mb[i]=,rs.mb[i]=;
For(i,,n) {
while(rs.ma[i]!=a[i]) rs=rs+bs;
bs=bs*p[i];
}
int tp=;
For(i,,n) if(rs.ma[i]==) tp++;
For(i,,m) {
if(tp==n) cout<<bs.mb[i]<<endl;
else cout<<rs.mb[i]<<endl;
}
Formylove;
}

T2 净化

最短路裸题。。

把水厂的dis设为0跑最短路,对于单向边u->v,答案和dis[u]+val(u,v)取max,对于双向边u<->v,ans-dis[u]+ans-dis[v]>=val(u,v)。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=,inf=1e9;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,is[N],ec[N][]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int ecnt,fir[N],nxt[N],to[N],val[N];
void add(int u,int v,int w,int i) {
nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v; val[ecnt]=w;
} struct node {
int x,dis;
node(int x,int dis):x(x),dis(dis){}
friend bool operator <(const node&A,const node&B) {
return A.dis>B.dis;
}
};
priority_queue<node>que; int dis[N];
int solve() {
For(i,,n) {
if(is[i]==) {
dis[i]=;
que.push(node(i,));
}
else dis[i]=inf;
}
while(!que.empty()) {
node t=que.top();
que.pop();
if(t.dis!=dis[t.x]) continue;
for(int i=fir[t.x];i;i=nxt[i]) {
if(dis[to[i]]>t.dis+val[i]) {
dis[to[i]]=t.dis+val[i];
que.push(node(to[i],dis[to[i]]));
}
}
}
int rs=;
For(i,,m) {
int x=ec[i][],y=ec[i][];
int t=ec[i][],len=ec[i][];
if(t==) rs=max(rs,dis[x]+len);
else {
int tp=(dis[x]+dis[y]+len)/;
if((dis[x]+dis[y]+len)%) tp++;
if(tp>rs) rs=tp;
}
}
return rs;
} #define ANS
int main() {
#ifdef ANS
freopen("purify.in","r",stdin);
freopen("purify.out","w",stdout);
#endif
read(n); read(m);
For(i,,n) read(is[i]);
For(i,,m) {
int x,y,t,len;
read(x); read(y); read(t); read(len);
ec[i][]=x; ec[i][]=y;
ec[i][]=t; ec[i][]=len;
add(x,y,len,i);
if(t==) add(y,x,len,i);
}
printf("%d\n",solve());
Formylove;
}

T3 三点通信

lca裸题。。

树上的答案等于d[x]+d[y]+d[z]-d[lca(x,y)]-d[lca(x,z)]-d[lca(y,z)]

有环的话,记下多出的一条边,要么只在树上走,同上,要么考虑多出的一条边(u,v)要被经过,枚举x,y,z中某些点到u,某些点到v,再加上u,v的权值。

求树上k个点之间的路径长度的话,怕是要建虚树哦,不知道有没有更简单的方法。

 //Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,q;
LL HC,HD[N]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int ecnt,fir[N],nxt[N],to[N];
LL val[N];
void add(int u,int v,LL w) {
nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v; val[ecnt]=w;
nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u; val[ecnt]=w;
} int vis[N],R[N],ok,ex,ey,f[N][];
LL dis[N],el;
void dfs(int x,int fa) {
vis[x]=;
f[x][]=fa;
R[x]=R[fa]+;
For(i,,) f[x][i]=f[f[x][i-]][i-];
for(int i=fir[x];i;i=nxt[i]) if(to[i]!=fa) {
if(vis[to[i]]) {
ok=;
ex=x; ey=to[i]; el=val[i];
}
else {
dis[to[i]]=dis[x]+val[i];
dfs(to[i],x);
}
}
} int lca(int x,int y) {
if(R[x]<R[y]) swap(x,y);
Rep(i,,) if(R[f[x][i]]>=R[y])
x=f[x][i];
if(x==y) return x;
Rep(i,,) if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
return f[x][];
} LL calc(int a,int b) { return dis[a]+dis[b]-2LL*dis[lca(a,b)]; }
LL calc(int a,int b,int c) { return dis[a]+dis[b]+dis[c]-dis[lca(a,b)]-dis[lca(a,c)]-dis[lca(b,c)]; } LL solve(int a,int b,int c) {
LL rs=calc(a,b,c);
if(ok) {
rs=min(rs,calc(a,ex)+calc(b,c,ey)+el);
rs=min(rs,calc(b,ex)+calc(a,c,ey)+el);
rs=min(rs,calc(c,ex)+calc(a,b,ey)+el);
rs=min(rs,calc(a,ey)+calc(b,c,ex)+el);
rs=min(rs,calc(b,ey)+calc(a,c,ex)+el);
rs=min(rs,calc(c,ey)+calc(a,b,ex)+el);
}
return rs;
} #define ANS
int main() {
#ifdef ANS
freopen("three.in","r",stdin);
freopen("three.out","w",stdout);
#endif
read(n); read(m); read(q);
For(i,,m) {
int x,y; LL z;
read(x); read(y); read(z);
add(x,y,z);
}
dfs(,);
For(cs,,q) {
int x,y,z;
read(x); read(y); read(z);
printf("%lld\n",solve(x,y,z));
}
Formylove;
}

NOIp2018集训test-10-23的更多相关文章

  1. [NOIP2018模拟赛10.23]发呆报告

    闲扯 考场看了眼题目感觉很难,一个小时敲完了所有暴力...嗯然后就在那里发呆什么事也没做 T3考场上把数据结构想了个遍都不会完成1操作,现在看这种思路其实之前也接触过... 比较玄学的一件事情就是T1 ...

  2. 背水一战 Windows 10 (23) - MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过 ButtonBase 触发命令

    [源码下载] 背水一战 Windows 10 (23) - MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过 ButtonBase 触发命令 作者:webabcd ...

  3. 10.23 正睿停课训练 Day7

    目录 2018.10.23 正睿停课训练 Day7 A 矩形(组合) B 翻转(思路) C 求和(思路 三元环计数) 考试代码 B1 B2 C 2018.10.23 正睿停课训练 Day7 期望得分: ...

  4. Daily Scrum 10.23

    (写于10.22周四) 说下现在的人员情况: 康家华请假至下周一,刘彦熙至周五18:00,张启东至周六中午. 其他人正常工作. 然后是现在的进度情况: 已经完成服务器数据库搭建,以及基础的注册登陆功能 ...

  5. [NOIP2018模拟赛10.16]手残报告

    [NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...

  6. [jzoj NOIP2018模拟10.23]

    丢分主要是下面几个方面: 1.T2代码交错了,有个特判没写丢了10分 2.T1线段树加等差数列写错了(其实二维差分就可以,但我当时不会) 3.T3思考再三还是为了10分写上了主席树,还是写错了 总体评 ...

  7. [NOIP2018模拟赛10.20A]挂分报告

    闲扯 先看看了B组,T1 ZROI刚好讲过一个性质原根一般很小的,直接枚举;T2一眼二分然后似乎状压 T3没看 然后上来A组题,T1 flow这名字...网络流?! T1题面非常的社会主义核心价值观, ...

  8. Notes of the scrum meeting(2013/10/23)

    ps:本来是10月23号周三下午开的会,这几天由于各种事情忙,忘记写博客了,现在补上. 软工项目组buaa_smile开始项目第一次scrum meeting meeting time:4:00~5: ...

  9. 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等

    今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...

  10. NOIP2018 集训(二)

    A题 神炎皇 问题描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对 \((a,b)\) ,若满足 \(a+b\leq n\) 且 \(a+b\) 是 \(ab\) 的因子,则称 为神 ...

随机推荐

  1. 【Flutter学习】基本组件之进度条(LinearProgressIndicator, CircularProgressIndicator)

    一,概述 基本有两种类型: 条形进度条(LinearProgressIndicator) new LinearProgressIndicator( backgroundColor: Colors.bl ...

  2. Python基础(三):简化除法判断、分析apache访问日志、扫描存活主机、利用多线程实现ssh并发访问

    一.简化除法判断 目标: 编写mydiv.py脚本,主要要求如下: 提示用户输入一个数字作为除数 如果用户按下Ctrl+C或Ctrl+D则退出程序 如果用户输入非数字字符,提示用户应该输入数字 如果用 ...

  3. HTTP协议-Headers

    Request headers 1 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ...

  4. (转)使用OpenGL显示图像(五)添加移动

    添加移动 编写:jdneo - 原文:http://developer.android.com/training/graphics/opengl/motion.html 转:http://hukai. ...

  5. OpenGL 学习总结

    最终呈现画出三角形的一个方式: public void draw(float[] mvpMatrix) { // Add program to OpenGL ES environment GLES20 ...

  6. 四. jenkins部署springboot项目(1)--window环境

    前提:jenkins和springboot运行在同一台机器 springboot项目使用git和maven jenkins所需的插件如Maven,Git等这里就不再详述. 1.jenkins配置git ...

  7. 公司-浪潮:浪潮/inspur

    ylbtech-公司-浪潮:浪潮/inspur 浪潮集团有限公司,即浪潮集团,是中国本土综合实力强大的大型IT企业之一,中国领先的云计算.大数据服务商.浪潮集团旗下拥有浪潮信息.浪潮软件.浪潮国际.华 ...

  8. upc组队赛6 Bumped!【最短路】

    Bumped! 题目描述 Peter returned from the recently held ACM ICPC World finals only to find that his retur ...

  9. 搭建RAID10(5块硬盘)过程并模拟其中一块硬盘损坏

    首先:RAID 10,实际是将RAID 0和RAID 1标准结合的产物,在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同时,为每一块磁盘作磁盘镜像进行冗余.它的优点是同时拥有RAID 0的超 ...

  10. Spring Boot控制上传文件大小

    spring: http: multipart: max-file-size: 5MB max-request-size: 20MB