11.7NOIP模拟题


/*
有循环节
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 10000000
using namespace std; int a,b,n,T;
int f[maxn]; inline int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
bool flag=false;
a=read();b=read();n=read();
f[]=;f[]=;f[]=(a+b)%;
for(int i=;i<=n;i++)
{
f[i]=(a*f[i-]+b*f[i-])%;
if(f[i-]==&&f[i]==) {flag=true;T=i-;break;}
}
if(!flag) printf("%d",f[n]);
else
{
int pos=n%T;if(pos==) pos=T;
printf("%d",f[pos]);
}
return ;
}


/*
转化为二维平面上
左下角走到右上角不经过对角线的路径条数
卡特兰数列
*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 100000000
#define ll long long
#define RG register int
#define rep(i,a,b) for(RG i=a;i<=b;i++)
#define per(i,a,b) for(RG i=a;i>=b;i--)
using namespace std;
int T;
double n,m;
inline int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
T=read();
while(T--)
{
n=read();m=read();
if(n<m) {puts("0.000000");continue;}
double _1=n-m+,_2=n+;
printf("%.6lf\n",_1/_2);
}
return ;
}


/*
Tarjan缩点后是一棵树
求树的直径并维护每个点到直径两端点的最大值。
三遍dfs即可
*/
#include<bits/stdc++.h>
#define maxn 20005
#define maxm 200005
using namespace std; int n,m,id,dfn[maxn],low[maxn],head[maxn],head2[maxn],cnt;
int dis[maxn],dis1[maxn],mx=,root;
int belong[maxn],belnum;
bool vis[maxn];
stack<int> stk;
struct Edge{
int u,v,val,next;
}edge[maxm<<],e[maxm<<]; inline int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
namespace Tarjan
{ inline void add(int u,int v,int val)
{
edge[++cnt].v=v;
edge[cnt].u=u;
edge[cnt].val=val;
edge[cnt].next=head[u];
head[u]=cnt;
} inline void tarjan(int u,int fa)
{
dfn[u]=low[u]=++id;
vis[u]=;
stk.push(u);
for(int i=head[u];i!=-;i=edge[i].next)
{
int v=edge[i].v;
if(!dfn[v])
{
tarjan(v,u);
low[u]=min(low[u],low[v]);
}
else if(vis[v]&&v!=fa)
{
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u])
{
belnum++;
int temp;
do{
temp=stk.top();
belong[temp]=belnum;
vis[temp]=;
stk.pop();
}while(temp!=u);
}
} inline void solve1()
{
memset(head,-,sizeof(head));
for(int i=,u,v,val;i<=m;i++)
{
u=read();v=read();val=read();
add(u,v,val);add(v,u,val);
}
for(int i=;i<=n;i++)
{
if(!dfn[i]) tarjan(i,);
}
} } namespace LP
{ inline void Add(int u,int v,int val)
{
e[++cnt].v=v;
e[cnt].val=val;
e[cnt].next=head2[u];
head2[u]=cnt;
} void dfs1(int u,int fa)
{
for(int i=head2[u];i!=-;i=e[i].next)
{
int v=e[i].v;
if(v==fa) continue;
dis[v]=dis[u]+e[i].val;
if(dis[v]>mx) mx=dis[v],root=v;
dfs1(v,u);
}
} void dfs2(int u,int fa)
{
for(int i=head2[u];i!=-;i=e[i].next)
{
int v=e[i].v;
if(v==fa) continue;
dis1[v]=dis1[u]+e[i].val;
dfs2(v,u);
}
} inline void solve2()
{
cnt=;
memset(head2,-,sizeof(head2));
for(int i=;i<=n;i++)
for(int j=head[i];j!=-;j=edge[j].next)
{
if(belong[i]!=belong[edge[j].v])
Add(belong[i],belong[edge[j].v],edge[j].val);
}
dfs1(,-);
mx=;memset(dis,,sizeof(dis));
dfs1(root,-);
mx=;
dfs2(root,-);
for(int i=;i<=n;i++)
printf("%d\n",max(dis[belong[i]],dis1[belong[i]]));
} }
int main()
{
freopen("prize.in","r",stdin);
freopen("prize.out","w",stdout);
n=read();m=read();
Tarjan::solve1();
LP::solve2();
return ;
}
11.7NOIP模拟题的更多相关文章
- 11.7NOIP模拟赛解题报告
心路历程 预计得分:\(50 + 100 + 100\) 实际得分:\(50 + 100 +100\) T2 T3两道数据结构题美滋滋,然而写完就过去\(3h\)美滋滋 T1数学题学弟们都会做Orzz ...
- 11.7noip模拟赛
题解:广义斐波那契数列 矩阵乘法 #include<iostream> #include<cstdio> #include<cstring> #define LL ...
- 10.11 NOIP模拟题(1)
/* 离散化 差分 */ #include<bits/stdc++.h> #define N 4000007 using namespace std; int n,ans; int tmp ...
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- poj 1888 Crossword Answers 模拟题
Crossword Answers Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 869 Accepted: 405 D ...
- CodeForces - 427B (模拟题)
Prison Transfer Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Sub ...
- 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...
- poj1472[模拟题]
Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2017 Accepted: 698 ...
- csu 1312 榜单(模拟题)
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1312 1312: 榜单 Time Limit: 1 Sec Memory Limit: 128 ...
随机推荐
- ****使用ftp软件上传下载php文件时换行符丢失bug
在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件 ...
- hdu - 1627 Krypton Factor (dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1627 给定 n 和 L 找出第n个范围在0-L之内的字符串,字符串要求没有相邻的子串是相同的. 按照格式输出. ...
- delphi的一些语法知识 以及参数传递问题,按引用方式传递参数,按值方式传递参数
//delphi中exit,abort,break,continue 的区别 exit: 退出函数体abort: 遇到异常,安静处理,就是不显示不提示break: 退出当前循环体,包括for ,whi ...
- webpack 输出多个文件
http://react-china.org/t/webpack/1870/2 webpack 文章 entry = { "button": "demo/button/i ...
- REST API 安全设计
REST API 安全设计 2017年04月27日 18:34:27 阅读数:1699 Rest API 的那些事儿 作者/ asterisk 在软件行业快速发展的今天,传统的软件授权已经不能足以 ...
- Word Break II 求把字符串拆分为字典里的单词的全部方案 @LeetCode
这道题相似 Word Break 推断能否把字符串拆分为字典里的单词 @LeetCode 只不过要求计算的并不不过能否拆分,而是要求出全部的拆分方案. 因此用递归. 可是直接递归做会超时,原因是Le ...
- 实战c++中的vector系列--emplace_back造成的引用失效
上篇将了对于struct或是class为何emplace_back要优越于push_back,可是另一些细节没有提及.今天就谈一谈emplace_back造成的引用失效. 直接撸代码了: #inclu ...
- [Canvas画图] 藏图阁(16) 人体穴位
本节目标: 趁着今天是愚人节.阿伟决定来重温一下学医的那段日子. 有那么一段时间, 阿伟对武侠小说和医学同一时候产生了浓厚的兴趣,当时最想学的就是葵花点穴手, 一阳指之类的点穴功夫.轻轻一点.就能把别 ...
- 状压DP问题
状态压缩·一 题目传送:#1044 : 状态压缩·一 AC代码: #include <map> #include <set> #include <list> #in ...
- VC++6.0不能显示MSDN解决的方法
1.搜索看系统是否有Vshelp.dll文件.没有则去站点下载一个 位操作系统直接将下载的文件放在C:\Windows\System32 位操作系统则放在C:\Windows\SysWOW64 3.点 ...