• 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. 【mysql】【转发】[Err]1267 - Illegal mix of collations(utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,I

    [Err]1267 - Illegal mix of collations(utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for o ...

  2. http请求原理

    客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line).请求头部(header).空行和请求数据四个部分组成,下图给出了请求报文的一般格式. 请求行 HTTP响应 ...

  3. Linux学习-SRPM 的使用 : rpmbuild (Optional)

    新版的 rpm 已经 将 RPM 与 SRPM 的指令分开了,SRPM 使用的是 rpmbuild 这个指令,而不是 rpm 喔! 利用默认值安装 SRPM 文件 (--rebuid/--recomp ...

  4. Linux学习-检验软件正确性

    md5sum / sha1sum / sha256sum 目前有多种机制可以计算文件的指纹码,我们选择使用较为广泛的 MD5, SHA1 或 SHA256 加密机 制来处理,我们拿NTP 软件来检查看 ...

  5. UVa 10118 记忆化搜索 Free Candies

    假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. #include <cstdio> #include & ...

  6. 创建dll及使用

    一.创建动态链接库文件 ** 1.打开VS2013,选择文件,新建工程  2.选择新建W32控制台应用程序,这里将工程名改为makeDLL  3.在应用程序类型中选择DLL,点击完成  4.完成以上步 ...

  7. 取出列表中第N大的数

    array=list(range(10)) random.shuffle(array) print(array) def func1(array,n): d,k={},n while k>0: ...

  8. 九度oj 1006

    题目1006:ZOJ问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:20252 解决:3544 题目描述:                        对给定的字符串(只包含'z', ...

  9. 前面板插口耳机无声音?无Realtek控制器?

    今天碰到一个很恶心的问题,电脑又没有声音了, 因为新装的系统,怀疑没有驱动,就装了驱动,还是没有有声音, 网上搜了半天都是让在控制面板找Realtek控制器,可以我的控制面板没有. 最后找到一篇百度经 ...

  10. Unity3D - UGUI的手动搭建

    了解UGUI组件的搭建方式,有助于搭建我们自己的UI界面. Text 文本 text 是UGUI中的基本控件,在Hierarchyi面板创建一个空物体 - 给这个空物体添加一个Text组件即可实现与t ...