NOIp2018集训test-10-23
上午考了一套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的更多相关文章
- [NOIP2018模拟赛10.23]发呆报告
闲扯 考场看了眼题目感觉很难,一个小时敲完了所有暴力...嗯然后就在那里发呆什么事也没做 T3考场上把数据结构想了个遍都不会完成1操作,现在看这种思路其实之前也接触过... 比较玄学的一件事情就是T1 ...
- 背水一战 Windows 10 (23) - MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过 ButtonBase 触发命令
[源码下载] 背水一战 Windows 10 (23) - MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过 ButtonBase 触发命令 作者:webabcd ...
- 10.23 正睿停课训练 Day7
目录 2018.10.23 正睿停课训练 Day7 A 矩形(组合) B 翻转(思路) C 求和(思路 三元环计数) 考试代码 B1 B2 C 2018.10.23 正睿停课训练 Day7 期望得分: ...
- Daily Scrum 10.23
(写于10.22周四) 说下现在的人员情况: 康家华请假至下周一,刘彦熙至周五18:00,张启东至周六中午. 其他人正常工作. 然后是现在的进度情况: 已经完成服务器数据库搭建,以及基础的注册登陆功能 ...
- [NOIP2018模拟赛10.16]手残报告
[NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...
- [jzoj NOIP2018模拟10.23]
丢分主要是下面几个方面: 1.T2代码交错了,有个特判没写丢了10分 2.T1线段树加等差数列写错了(其实二维差分就可以,但我当时不会) 3.T3思考再三还是为了10分写上了主席树,还是写错了 总体评 ...
- [NOIP2018模拟赛10.20A]挂分报告
闲扯 先看看了B组,T1 ZROI刚好讲过一个性质原根一般很小的,直接枚举;T2一眼二分然后似乎状压 T3没看 然后上来A组题,T1 flow这名字...网络流?! T1题面非常的社会主义核心价值观, ...
- Notes of the scrum meeting(2013/10/23)
ps:本来是10月23号周三下午开的会,这几天由于各种事情忙,忘记写博客了,现在补上. 软工项目组buaa_smile开始项目第一次scrum meeting meeting time:4:00~5: ...
- 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等
今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...
- NOIP2018 集训(二)
A题 神炎皇 问题描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对 \((a,b)\) ,若满足 \(a+b\leq n\) 且 \(a+b\) 是 \(ab\) 的因子,则称 为神 ...
随机推荐
- 04-树5 Root of AVL Tree(25 分)
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...
- videojs 播放无法通过URI确定格式的视频源(flv/mp4)
前言 前人坑我千百遍我待前人如初恋.最近公司开源节流搬机房,需要把原来的服务迁移,然后屁颠屁颠的把一个跑了几年没人管的视频网站(知道这个网站的人都走了)迁移到新的机房去. 结果跑起来发现原来里面同时存 ...
- Kubernetes 技能图谱skill-map
# Kubernetes 技能图谱 ## Container basics (容器技术基础)* Kernel* Cgroups* Userspace runtime* Image* Registry ...
- 反向代理Reverse proxy
https://www.zhihu.com/question/24723688/answer/160252724 反向代理在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的 ...
- VTemplate模板引擎的使用--入门篇
1.什么是VTemplate模板引擎? 详细请点击这里. 2.怎样使用VTemplate模板引擎? 第1步: 下载VTemplate模板引擎的最新库文件(从这里下载),下载回来后将库文件引入到你的项目 ...
- Tomcat负载均衡、调优核心应用进阶学习笔记(五):Tomcat调优和Tomcat监控(差评)
文章目录 tomcat调优 tomcat监控 tomcat调优 vi catalina.sh # --------------------------------------------------- ...
- MySQL的安装配置(无坑
简单记录一下自己掉坑无数之后,终于找到的一个不坑的方法. 一.安装 #进入一个习惯的文件夹 cd /usr/local/src #下载资源包 wget -i -c http://dev.mysql.c ...
- Centos7安装 Hadoop(单节点)
1.Hadoop简介 Hadoop是一个由Apache基金会所开发的开源分布式系统基础框架,使用Java开发,是处理大规模数据的软件平台. Hadoop可以从单一节点扩展到上千节点.用户可以在不了解分 ...
- linux替换rm命令,防止误删
1. 在/home/username/ 目录下新建一个目录,命名为:.trash 2.. 在/home/username/tools/目录下,新建一个shell文件,命名为: remove.sh #! ...
- spark textFile读取多个文件
1.spark textFile读取File 1.1 简单读取文件 val spark = SparkSession.builder() .appName("demo") .mas ...