2017-11-07-noip模拟题
T1 数学老师的报复

矩阵快速幂模板,类似于菲波那切数列的矩阵
[1,1]*[A,1
B,0]
#include <cstdio> #define LL long long
inline void read(LL &x)
{
x=; register char ch=getchar(); register bool _=;
for(; ch>''||ch<''; ch=getchar()) if(ch=='-') _=;
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
x=_?((~x)+):x;
}
const int mod();
LL a,b,n; struct Matrix_fb {
LL e[][];
Matrix_fb operator * (Matrix_fb x) const
{
Matrix_fb ret;
for(int i=; i<; ++i)
for(int j=; j<; ++j)
{
ret.e[i][j]=;
for(int k=; k<; ++k)
ret.e[i][j]+=e[i][k]*x.e[k][j],ret.e[i][j]%=mod;
}
return ret;
}
} ans,base; int Presist()
{
// freopen("attack.in","r",stdin);
// freopen("attack.out","w",stdout); read(a),read(b),read(n);
if(n<=) { puts(""); return ; }
ans.e[][]=ans.e[][]=;
ans.e[][]=ans.e[][]=;
base.e[][]=a%,base.e[][]=,
base.e[][]=b%,base.e[][]=;
for(n-=; n; n>>=,base=base*base)
if(n&) ans=ans*base;
printf("%lld\n",ans.e[][]);
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}
AC
T2 和生物老师的战争

#include <cstdio> inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} int Presist()
{
freopen("fseq.in","r",stdin);
freopen("fseq.out","w",stdout);
int t; read(t);
for(int n,m; t--; )
{
read(n),read(m);
if(n<m) puts("0.000000");
else
{
double fz=n-m+;
double fm=n+;
printf("%.6lf\n",fz/fm);
}
}
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}
AC
T3 化学竞赛的大奖

#include <cstring>
#include <cstdio>
#include <queue> #define LL long long
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b) inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
}
const int N(+);
const int M(+);
int n,m;
int head[][N],sumedge[];
struct Edge {
int v,next,w;
Edge(int v=,int next=,int w=):v(v),next(next),w(w){}
}edge[][M<<];
inline void ins(int u,int v,int w,int op)
{
edge[op][++sumedge[op]]=Edge(v,head[op][u],w),head[op][u]=sumedge[op];
edge[op][++sumedge[op]]=Edge(u,head[op][v],w),head[op][v]=sumedge[op];
} int tim,dfn[N],low[N];
int top,sta[N],insta[N];
int sumcol,col[N];
void DFS(int u,int pre)
{
low[u]=dfn[u]=++tim;
sta[++top]=u, insta[u]=;
for(int v,i=head[][u]; i; i=edge[][i].next)
{
/*if(vis[i]||vis[i^1]) continue;
vis[i]=vis[i^1]=true;*/
v=edge[][i].v; if(v==pre) continue;
if(!dfn[v]) DFS(v,u),low[u]=min(low[u],low[v]);
else if(insta[v]) low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
col[u]=++sumcol;
for(; u!=sta[top]; top--)
{
col[sta[top]]=sumcol;
insta[sta[top]]=false;
}
insta[u]=false, top--;
}
} struct Node {
int pos; LL dis;
bool operator < (const Node&x)const
{
return dis<x.dis;
}
}u,v;
std::priority_queue<Node>que;
LL dis[N],ans[N];
bool vis[N];
inline void Dijkstra(int s)
{
for(; !que.empty(); ) que.pop();
for(int i=; i<=sumcol; ++i)
dis[i]=-,vis[i]=false; dis[s]=u.dis=,u.pos=s; que.push(u);
for(; !que.empty(); )
{
u=que.top(); que.pop();
if(vis[u.pos]) continue; vis[u.pos]=;
for(int i=head[][u.pos]; i; i=edge[][i].next)
{
v.pos=edge[][i].v; if(!vis[v.pos])
if(dis[v.pos]<dis[u.pos]+edge[][i].w)
{
v.dis=u.dis+(LL)edge[][i].w;
ans[s]=max(ans[s],v.dis);
dis[v.pos]=v.dis;
que.push(v);
}
}
}
} int Presist()
{
// freopen("prize.in","r",stdin);
// freopen("prize.out","w",stdout); read(n),read(m);
for(int u,v,w,i=; i<=m; ++i)
read(u),read(v),read(w),ins(u,v,w,);
for(int i=; i<=n; ++i)
if(!dfn[i]) DFS(i,-); for(int v,u=; u<=n; ++u)
for(int i=head[][u]; i; i=edge[][i].next)
{
v=edge[][i].v; if(col[u]==col[v]) continue;
ins(col[u],col[v],edge[][i].w,);
} for(int i=; i<=sumcol; ++i) ans[i]=-, Dijkstra(i);
for(int i=; i<=n; ++i) printf("%lld\n",ans[col[i]]);
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}
缩点后,n边Dijkstra 40分,,考试暴力
可以先求出强连通分量,两次dfs得到数的直径,ans[i]=max(dis(s,i),dis(t,i))
#include <cstring>
#include <cstdio> #define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b) inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} const int N(+);
const int M(+); int n,m;
int head[][N],sumedge[];
struct Edge {
int v,next,w;
Edge(int v=,int next=,int w=):v(v),next(next),w(w){}
}edge[][M<<];
inline void ins(int u,int v,int w,int op)
{
edge[op][++sumedge[op]]=Edge(v,head[op][u],w),head[op][u]=sumedge[op];
if(!op) edge[op][++sumedge[op]]=Edge(u,head[op][v],w),head[op][v]=sumedge[op];
} int tim,dfn[N],low[N];
int top,sta[N],insta[N];
int sumcol,col[N]; namespace Tarjan { void DFS(int u,int pre)
{
low[u]=dfn[u]=++tim;
sta[++top]=u, insta[u]=;
for(int v,i=head[][u]; i; i=edge[][i].next)
{
v=edge[][i].v;
if(!dfn[v]) DFS(v,u),low[u]=min(low[u],low[v]);
else if(insta[v]&&v!=pre) low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
col[u]=++sumcol;
for(; u!=sta[top]; top--)
{
col[sta[top]]=sumcol;
insta[sta[top]]=false;
}
insta[u]=false, top--;
}
}
inline void work()
{
for(int i=; i<=n; ++i)
if(!dfn[i]) DFS(i,-);
}
} int dis[][N],s,t,maxx;
namespace Solve {
void DFS(int u,int pre)
{
for(int v,i=head[][u]; i; i=edge[][i].next)
{
v=edge[][i].v; if(pre==v) continue;
dis[][v]=dis[][u]+edge[][i].w;
if(dis[][v]>maxx) maxx=dis[][v],s=v;
DFS(v,u);
}
}
void DFS_(int u,int pre)
{
for(int v,i=head[][u]; i; i=edge[][i].next)
{
v=edge[][i].v; if(v==pre) continue;
dis[][v]=dis[][u]+edge[][i].w; DFS_(v,u);
}
}
inline void work()
{
for(int v,u=; u<=n; ++u)
for(int i=head[][u]; i; i=edge[][i].next)
{
v=edge[][i].v; if(col[u]==col[v]) continue;
ins(col[u],col[v],edge[][i].w,);
}
DFS (,-);
for(int i=; i<=sumcol; ++i) dis[][i]=; maxx=; DFS (s,-);
DFS_(s,-);
for(int i=; i<=n; ++i)
printf("%d\n",max(dis[][col[i]],dis[][col[i]]));
} } int Presist()
{
freopen("prize.in","r",stdin);
freopen("prize.out","w",stdout); read(n),read(m);
for(int u,v,w,i=; i<=m; ++i)
read(u),read(v),read(w),ins(u,v,w,);
Tarjan::work();
Solve ::work();
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}
AC
2017-11-07-noip模拟题的更多相关文章
- 2018.11.07 NOIP模拟 数独(模拟)
传送门 sbsbsb签到题. 读题时间比写题时间长系列. 写一个checkcheckcheck函数来检验当前时间段第(i,j)(i,j)(i,j)号格子能否放入kkk就行了. 代码
- 2018.11.07 NOIP模拟 异或(数位dp)
传送门 对于每个二进制位单独考虑贡献. 然后对于两种情况分别统计. 对于第二种要用类似数位dpdpdp的方法来计算贡献. 代码
- 2018.11.07 NOIP模拟 分糖果(贪心)
传送门 考虑 n = 2 时的情况:假定两个人分别为(a, b),(c, d),则当且仅当min(a,d) ≤ min(b,c)时,把(a, b)放在前面更优,否则把(c, d)放在前面更优 然后把n ...
- NOIP模拟题汇总(加厚版)
\(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...
- 11.7 NOIP模拟赛
目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...
- 【入门OJ】2003: [Noip模拟题]寻找羔羊
这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...
- 9.9 NOIP模拟题
9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...
- 8.22 NOIP 模拟题
8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...
- 11/1 NOIP 模拟赛
11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...
- 11.07图论水题Test
11.07图论水题Test 题目 描述 做法 \(BSOJ6378\) 在\(i\)位置可以到\(i+a_i\)或\(i+b_i\)求\(1\rightarrow n\)字典序最小路径 判可达性后贪心 ...
随机推荐
- hdu 6333
Problem Description There are n apples on a tree, numbered from 1 to n.Count the number of ways to p ...
- The 2018 ACM-ICPC Chinese Collegiate Programming Contest Moving On
Firdaws and Fatinah are living in a country with nn cities, numbered from 11 to nn.Each city has a r ...
- [solution]腾讯TEG_计算广告组_算法题
度娘笔试归来,题目实打实的,感觉真心不易,上百号人就抢那么几个坑......只恨自己平时积累太少啊~ 故曝一道鹅厂面试用的算法题(当时我就死在了这题上),来为度娘家攒一下RP~ 题目: 对于长度为N的 ...
- UVa 11651 Krypton Number System DP + 矩阵快速幂
题意: 有一个\(base(2 \leq base \leq 6)\)进制系统,这里面的数都是整数,不含前导0,相邻两个数字不相同. 而且每个数字有一个得分\(score(1 \leq score \ ...
- BZOJ 2243 染色 树链剖分
题意: 给出一棵树,每个顶点上有个颜色\(c_i\). 有两种操作: C a b c 将\(a \to b\)的路径所有顶点上的颜色变为c Q a b 查询\(a \to b\)的路径上的颜色段数,连 ...
- UVa 1630 区间DP Folding
一个字符串如果能简写,要么是重复多次,按题中的要求简写:要么是左右两个部分分别简写后再拼起来. dp(i, j)表示字串(i, j)所能被简写的最短的字符串. 判断一个字符串是否为周期串以及求出它的周 ...
- Python虚拟机中的一般表达式(三)
其他一般表达式 在前两章:Python虚拟机中的一般表达式(一).Python虚拟机中的一般表达式(二)中,我们介绍了Python虚拟机是怎样执行创建一个整数值对象.字符串对象.字典对象和列表对象.现 ...
- 十分钟了解HTTP协议
概念 HTTP(Hypertext Transfer Protocol,超文本传输协议)是TCP/IP协议的应用(封装). HTTP协议是单向通讯,无状态,主要应用于B/S模型的网络软件,客户端一(多 ...
- webdriver高级应用- 在HTML5的画布元素上进行绘画操作
#encoding=utf-8 import unittest from selenium import webdriver import time class TestDemo(unittest.T ...
- python-高级编程-05-异步IO
[异步非阻塞IO] ------------------------------------------------------------------------------------------ ...