11.7noip模拟赛
题解:广义斐波那契数列 矩阵乘法
#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
using namespace std; LL n,A,B; inline LL read(){
char ch=getchar();LL x=,f=;
for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';
return x*f;
} struct maxtix{
int t[][];
}ans; maxtix maxtix_mul(maxtix a,maxtix b){
maxtix tmp;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
tmp.t[i][j]=;
for(int k=;k<=;k++){
tmp.t[i][j]=(tmp.t[i][j]%+a.t[i][k]*b.t[k][j]%)%;
}
}
}
return tmp;
} maxtix maxtix_mul(maxtix a,LL b){
maxtix ret=a;b--;
while(b){
if(b&)ret=maxtix_mul(ret,a);
a=maxtix_mul(a,a);
b>>=;
}
return ret;
} int main(){
freopen("attack.in","r",stdin);
freopen("attack.out","w",stdout);
A=read();B=read();n=read();
A%=;B%=;
if(n<=){
LL f1=,f2=,f3;
for(int i=;i<=n;i++){
f3=(A*f2+B*f1)%;
f1=f2;f2=f3;
}
printf("%lld\n",f2);
fclose(stdin);fclose(stdout);
return ;
}
ans.t[][]=;ans.t[][]=B;ans.t[][]=;ans.t[][]=A;
ans=maxtix_mul(ans,n-);
printf("%d\n",(ans.t[][]+ans.t[][])%);
fclose(stdin);fclose(stdout);
return ;
}
AC
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <set> #define rg register
inline void read (int &n)
{
rg char c = getchar ();
for (n = ; !isdigit (c); c = getchar ());
for (; isdigit (c); n = n * + c - '', c = getchar ());
} #define Max 20006
int a[Max], s[Max];
std :: string data;
std :: set <std :: string> lis; int main (int argc, char *argv[])
{
// freopen ("tb.txt", "w", stdout);
int T, x, y, N, C, r ; rg int i;
for (x = ; x <= ; ++ x)
{
for (y = ; y <= x; ++ y)
{
N = x + y;
data.resize (N); C = , r = ;
printf ("%d %d ", x, y);
if (y == ) { puts ("1.000000"); continue; }
if (x == ) { puts ("0.000000"); continue; } if (y > x) { puts ("0.000000"); continue; }
for (i = ; i <= x; ++ i) a[i] = ;
for (i = x + ; i <= N; ++ i) a[i] = ;
do
{
// for (i = 0; i < N; ++ i) data[i] = a[i + 1] - '0';
// if (lis.count (data)) continue;
// else lis.insert (data); s[N + 1] = 0;
for (i = N; i >= ; -- i)
{
s[i] = s[i + ] + a[i];
if (s[i] > (N - i + ) - s[i]) { ++ r; break; }
}
++ C;
} while (std :: next_permutation (a + , a + + N));
printf ("%.6lf\n", (C - r) * 1.0 / C);
// puts ("");
}
}
return ;
}
ZlycerQan打表code
打表找规律 n相同m不同时是等差数列。
注意特判
#include<iostream>
#include<cstdio>
using namespace std; int t,n,m; int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
if(n<m){puts("0.000000");continue;}
printf("%.6lf\n",1.0-m/(n+1.0));
}
}
AC
题解:
暴力40
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define N 20009
using namespace std;
queue<int>q;
int n,m,sumedge; int head[N]; int sum_col,tim,top; int instack[N],Stack[N],bel[N],low[N],dfn[N],ans[N]; int sumEDge,hed[N],d[N],vis[N],dis[N],cnt[N],po[N]; struct Edge{
int x,y,z,nxt;
Edge(int x=,int y=,int z=,int nxt=):
x(x),y(y),z(z),nxt(nxt){}
}edge[(N*)<<]; void add(int x,int y,int z){
edge[++sumedge]=Edge(x,y,z,head[x]);
head[x]=sumedge;
} struct EDge{
int x,y,z,nxt;
EDge(int x=,int y=,int z=,int nxt=):
x(x),y(y),z(z),nxt(nxt){}
}e[N<<]; void add_(int x,int y,int z){
e[++sumEDge]=EDge(x,y,z,hed[x]);
hed[x]=sumEDge;
} inline int read(){
char ch=getchar();int x=,f=;
for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';
return x*f;
} void tarjian(int x,int fa){
low[x]=dfn[x]=++tim;
instack[x]=true;Stack[++top]=x;
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
// if(v==fa)continue;
if(instack[v]&&v!=fa){
low[x]=min(low[x],dfn[v]);
}else if(dfn[v]==){
tarjian(v,x);
low[x]=min(low[x],low[v]);
}
}
if(low[x]==dfn[x]){
sum_col++;
while(Stack[top+]!=x){
bel[Stack[top]]=sum_col;
instack[Stack[top]]=false;
top--;
}
}
} void spfa(int s){
memset(vis,,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
while(!q.empty())q.pop();
dis[s]=;vis[s]=true;q.push(s);
while(!q.empty()){
int now=q.front();q.pop();vis[now]=false;
for(int i=hed[now];i;i=e[i].nxt){
int v=e[i].y;
if(dis[v]>dis[now]+e[i].z){
dis[v]=dis[now]+e[i].z;
ans[s]=max(ans[s],dis[v]);
if(vis[v]==){
vis[v]=true;q.push(v);
}
}
}
}
} int main(){
// freopen("prize.in","r",stdin);
// freopen("prize.out","w",stdout);
n=read();m=read();
for(int i=;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
}
tarjian(,);
// cout<<sum_col<<endl;
for(int x=;x<=n;x++){
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
if(bel[v]!=bel[x]&&(po[bel[v]]==||po[bel[x]]==)){
cnt[bel[x]]++;cnt[bel[v]]++;po[bel[v]]=true;po[bel[x]]=true;
add_(bel[v],bel[x],edge[i].z);add_(bel[x],bel[v],edge[i].z);
d[bel[x]]++;d[bel[v]]++;
}
}
}
for(int i=;i<=sum_col;i++)spfa(i);
for(int i=;i<=n;i++)printf("%d\n",ans[bel[i]]);
// fclose(stdin);fclose(stdout);
return ;
}
40
缩点后就是一棵树 ,某个点到树直径的两端距离最大值就是答案
边没判重一直死循环,我觉得重边没关系呀,保险还是判重吧。
#include<cstdio>
#include<cstring>
#include<map>
#include<iostream>
#include<algorithm>
#define N 20010
using namespace std;
map<int,int>ma[N];
int n,m; int sumedge,head[N]; int top,tim,sumcol; int bel[N],Stack[N],instack[N],dfn[N],low[N]; int sume,hed[N]; int maxn,t,d1,d2,dis1[N],dis2[N]; struct Edge{
int x,y,z,nxt;
Edge(int x=,int y=,int z=,int nxt=):
x(x),y(y),z(z),nxt(nxt){}
}edge[(N*)<<]; struct EDGE{
int x,y,z,nxt;
EDGE(int x=,int y=,int z=,int nxt=):
x(x),y(y),z(z),nxt(nxt){}
}e[(N*)<<]; void add(int x,int y,int z){
edge[++sumedge]=Edge(x,y,z,head[x]);
head[x]=sumedge;
} void add_(int x,int y,int z){
e[++sume]=EDGE(x,y,z,hed[x]);
hed[x]=sume;
} void tarjian(int x,int fa){
low[x]=dfn[x]=++tim;
Stack[++top]=x;instack[x]=true;
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
if(instack[v]&&v!=fa)low[x]=min(low[x],dfn[v]);
else if(!dfn[v]){
tarjian(v,x);
low[x]=min(low[x],low[v]);
}
}
if(low[x]==dfn[x]){
sumcol++;
while(Stack[top+]!=x){
bel[Stack[top]]=sumcol;
instack[Stack[top]]=false;
top--;
}
}
} void dfs(int x,int fa){
for(int i=hed[x];i;i=e[i].nxt){
int v=e[i].y;
if(v==fa)continue;
dis1[v]=dis1[x]+e[i].z;
if(dis1[v]>maxn)maxn=dis1[v],t=v;
dfs(v,x);
}
} void dfs_(int x,int fa){
for(int i=hed[x];i;i=e[i].nxt){
int v=e[i].y;
if(v==fa)continue;
dis2[v]=dis2[x]+e[i].z;
dfs_(v,x);
}
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
}
for(int i=;i<=n;i++)if(!dfn[i])tarjian(i,-);
for(int x=;x<=n;x++){
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
if(bel[x]!=bel[v])
if(ma[bel[x]].find(bel[v])==ma[bel[x]].end()){
ma[bel[x]][bel[v]]=;
ma[bel[v]][bel[x]]=;
add_(bel[x],bel[v],edge[i].z);
add_(bel[v],bel[x],edge[i].z);
}
}
}
dfs(,-);
d1=t;memset(dis1,,sizeof(dis1));maxn=;
dfs(d1,-);
d2=t;
dfs_(d2,-);
for(int i=;i<=n;i++)printf("%d\n",max(dis1[bel[i]],dis2[bel[i]]));
return ;
}
11.7noip模拟赛的更多相关文章
- 11.7NOIP模拟赛解题报告
心路历程 预计得分:\(50 + 100 + 100\) 实际得分:\(50 + 100 +100\) T2 T3两道数据结构题美滋滋,然而写完就过去\(3h\)美滋滋 T1数学题学弟们都会做Orzz ...
- 9.11 myl模拟赛
9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...
- 2017.6.11 NOIP模拟赛
题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...
- 11.17 模拟赛&&day-2
/* 后天就要复赛了啊啊啊啊啊. 可能是因为我是一个比较念旧的人吧. 讲真 还真是有点不舍. 转眼间一年的时间就过去了. 2015.12-2016.11. OI的一年. NOIP gryz RP++. ...
- 2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字
美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运 ...
- 2014.11.12模拟赛【最小公倍数】| vijos1047最小公倍数
最小公倍数(lcm.c/.cpp/.pas) 题目描述 给定两个正整数,求他们的最小公倍数. 样例输入 28 12 样例输出 84 数据范围 对于40%数据:1<=a,b<=10^9 对于 ...
- 11.6NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 100 = 300\) 实际得分:\(100 +100 +100 = 300\) 学OI两年终于AK了一次qwq(虽然题目炒鸡水..) 纪念一下这令人激 ...
- 11.5NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 40 + 30 = 170\) 实际得分:\(100 +100 + 50 = 250\) 辣鸡数据毁我青春 T1一眼不会做感觉要凉 T2好像一波折半搜索就做完了 T ...
- 11.1NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 50\) 实际得分:\(100 + 100 + 50\) 感觉老师找的题有点水呀. 上来看T1,woc?裸的等比数列求和?然而我不会公式呀..感觉要凉 ...
随机推荐
- 基于Promise对象的新一代Ajax API--fetch
***************************************************************** #fetch Request 使用isomorphic-fetch发 ...
- 20165101刘天野 2018-2019-2《网络对抗技术》Exp1 逆向与Bof基础
20165101刘天野 2018-2019-2<网络对抗技术>Exp1 逆向与Bof基础 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执 ...
- JavaWeb 自定义标签库开发传统标签
自定义标签主要用于移除Jsp页面中的java代码. 移除jsp页面中的java代码,只需要完成两个步骤: 编写一个实现Tag接口的Java类,并覆盖doStartTag方法,把jsp页面中的java代 ...
- fabric网关模式文件上传与执行
- jvm-垃圾收集器与内存分配策略
垃圾收集器与内存分配策略 参考: https://my.oschina.net/hosee/blog/644085 http://www.cnblogs.com/zhguang/p/Java-JVM- ...
- LeetCode——Maximum Depth of Binary Tree
LeetCode--Maximum Depth of Binary Tree Question Given a binary tree, find its maximum depth. The max ...
- Java对象初始化
自动初始化(默认值) 一个类的所有基本数据成员都会得到初始化,运行下面的例子可以查看这些默认值: class Default{ boolean t; char c; byte b; short s; ...
- RedHat设置Yum源
Linux:RedHat AS 6.2的版本 1.删除原有的yum: rpm -aq | grep yum | xargs rpm -e –nodeps 2.安装新的yum <1>rpm ...
- mysql中去除重复字段-distinct
1.注意事项 使用distinct命令时需要放在查询条件的开头,否则会报错.如果需要查询的项目很多但只针对某一个字段使用distinct的,则可以利用内容拼接的方式来实现. --基本查询 SELECT ...
- OpenCV人脸检测并把图片写成avi视频
读出某一个文件夹下“jpg”后缀的全部图片后,用的OpenCV自带的人脸检测检测图片中的人脸,调整图片的大小写成一个avi视频. 主要是要记录一下CvVideoWriter的用法和如何从文件夹中读取某 ...