• 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模拟题的更多相关文章

  1. 2018.11.07 NOIP模拟 数独(模拟)

    传送门 sbsbsb签到题. 读题时间比写题时间长系列. 写一个checkcheckcheck函数来检验当前时间段第(i,j)(i,j)(i,j)号格子能否放入kkk就行了. 代码

  2. 2018.11.07 NOIP模拟 异或(数位dp)

    传送门 对于每个二进制位单独考虑贡献. 然后对于两种情况分别统计. 对于第二种要用类似数位dpdpdp的方法来计算贡献. 代码

  3. 2018.11.07 NOIP模拟 分糖果(贪心)

    传送门 考虑 n = 2 时的情况:假定两个人分别为(a, b),(c, d),则当且仅当min(a,d) ≤ min(b,c)时,把(a, b)放在前面更优,否则把(c, d)放在前面更优 然后把n ...

  4. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  5. 11.7 NOIP模拟赛

    目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...

  6. 【入门OJ】2003: [Noip模拟题]寻找羔羊

    这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...

  7. 9.9 NOIP模拟题

    9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...

  8. 8.22 NOIP 模拟题

      8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...

  9. 11/1 NOIP 模拟赛

    11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...

  10. 11.07图论水题Test

    11.07图论水题Test 题目 描述 做法 \(BSOJ6378\) 在\(i\)位置可以到\(i+a_i\)或\(i+b_i\)求\(1\rightarrow n\)字典序最小路径 判可达性后贪心 ...

随机推荐

  1. shutil,zipfile,tarfile模块

    一,shutil模块 1.shutil.chown() shutil.chown('test.txt',user='mysql',group='mysql') #改变文件的属主和属组. 2.shuti ...

  2. hdu 5441

    Travel Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  3. poj 2251 三维地图最短路径问题 bfs算法

    题意:给你一个三维地图,然后让你走出去,找到最短路径. 思路:bfs 每个坐标的表示为 x,y,z并且每个点都需要加上时间 t struct node{ int x, y, z; int t;}; b ...

  4. 1512 Monkey King

    Monkey King Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  5. spark作业

    假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发 Spark应用程序实现如下功能: 1.实时统计连续网购时间超过半个小时的女性网民信息. 2.周末两天的日志文件第一列为姓名,第 ...

  6. J2ee项目 编译依赖顺序

    这儿有个帖子, 最后一个回复是:  “我把我项目的libraries的"Order and Export"中的JRE与J2EE顺序换了一个问题解决”. 帖子地址: http://b ...

  7. 相机拍照功能之权限和Android版本问题

    代码改变世界 相机拍照功能之权限和Android版本问题 对于Android 6.0之前,想要使用系统的相机进行拍照,那么只要在AndroidManifedt.xml中进行添加相应的权限,主要是两个: ...

  8. iOS--------手势识别的详细使用:拖动、缩放、旋转、点击、手势依赖、自定义手势

    1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了 ...

  9. Welcome-to-Swift-15反初始化(Deinitialization)

    在一个类的实例被释放之前,反初始化函数被立即调用.用关键字deinit来标示反初始化函数,类似于初始化函数用init来标示.反初始化函数只适用于类类型. 反初始化原理 Swift会自动释放不再需要的实 ...

  10. Event based Collections

    https://sourceforge.net/p/happy-guys/wiki/Event%20based%20Collections/