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\)字典序最小路径 判可达性后贪心 ...
随机推荐
- PyCharm2019 激活方式
1.修改hosts激活:需要修改hosts,稳定无影响,持续更新,推荐~ 一.修改hosts激活 1.修改hosts文件 将0.0.0.0 account.jetbrains.com和0.0.0.0 ...
- poj-2488 a knight's journey(搜索题)
Time limit1000 ms Memory limit65536 kB Background The knight is getting bored of seeing the same bla ...
- 卸载firefox多余的搜索引擎
火狐默认了几个搜索引擎,百度,bing,yahoo等.搜一些技术方面的东西的时候,google返回的结果比这些要准确有用.所以想卸载掉那些不用的. 具体操作: 点击搜索栏,左侧搜索引擎图票右下角的倒三 ...
- CDH4 journalnode方式手工安装手册之一
一. 环境部署概况 cdh-master 172.168.10.251 cdh-node1 172.168.10.251 cdh-no ...
- HDU 5238 Calculator 线段树 中国剩余定理
题意: 给一个计算器,有一系列计算步骤,只有加,乘,幂三种运算. 有一种查询操作:查询初始值为\(x\)的时候,最终运算结果模\(29393\)的值. 有一种修改操作:可以修改第\(p\)个运算的运算 ...
- day01 项目
项目名称: 编写登陆接口 项目需求: 1 输入用户名密码 2 认证成功后显示欢迎信息 3 输错3次之后锁定,包括下次运行此程序也要锁定,涉及到持久化的问题只能用python 自 ...
- OpenSSL SNI
网站ssl检测工具 https://www.ssllabs.com/ssltest/analyze.html?d=gggl.houseoflux.com.cn https://myssl.com/ ...
- PostgreSQL 全文索引
-- 首先要创建自定义的词典,在不使用停用词文件的情况下创建自定义词典,例如: CREATE TEXT SEARCH DICTIONARY english_stem_nostop ( Template ...
- 设计模式(一)单例模式:3-静态内部类模式(Holder)
思想: 相比于懒汉以及饿汉模式,静态内部类模式(一般也被称为 Holder)是许多人推荐的一种单例的实现方式,因为相比懒汉模式,它用更少的代码量达到了延迟加载的目的. 顾名思义,这种模式使用了一个私有 ...
- kb-07线段树-12--二分查找区间边界
/* hdu4614 本题刚开始想能不能记录该区间最前面开始的点,最后面的点,区间空的数量:但是病不行 然后线段树的本质是区间操作,所以!这题主要就是区间的空的全放满,只要定出区间的边界就好办了: 这 ...