----------------------------------T1----------------------------------

——>数学老师的报复

题目描述

11 班数学大佬 YXN 又在上数学课的时候把班主任 MP6 的错误当众挑出来了,MP6 再一次感到很难堪,于是决定报复 YXN

MP6 对 YXN 说:给你一个函数 f(x),定义如下:
f ( 1 ) = 1
f ( 2 ) = 1
f ( n ) = ( A * f ( n - 1 ) + B * f ( n - 2 ) ) mod 7。

YXN 说这还不简单,可以秒杀! MP6 微微笑了笑说:n 等于 100 你算得出来,那 n 等于 2147483648 呢?

YXN 哑口无言,决定向信息组的你求助。由于这是你唯一一次可以在数学题上秒杀 YXN,

你决定好好把握这一次机会。

输入输出格式

输入格式:

仅一行包含 3 个整数 A,B 和 n。

输出格式:

一个整数,即 f ( n ) 的值。

输入输出样例

暂无测试点

说明

20%的数据, n≤1,000

50%的数据, n≤100,000,000

100%的数据,n≤2147,483,648

思路

  ①骗分

    找出0~6 0~6的规律,打个表,然后按照规律进行输出即可(竟然95....)

    表:

//无限不会打...用‘&’代替好啦
0 0 -> {
1 1 0
0
.
}
0 1 -> & (all 1)
0 2 -> 6
0 3 -> 12
0 4 -> 6
0 5 -> 12
0 6 -> 6
0 7 -> {
1 1 0
0
.
}
------------------------------
1 0 -> & (all 1)
1 1 -> 16
1 2 -> 6
1 3 -> 24
1 4 -> 48
1 5 -> 21
1 6 -> 6
//循环
1 7 -> & (all 1)
------------------------------
2 0 -> {
1 1 2 4 1
2 4 1
.....
}
2 1 -> 6
2 2 -> 48
2 3 -> 6
2 4 -> 48
2 5 -> 24
2 6 -> & (all 1)
2 7 -> {
1 1 2 4 1
2 4 1
.....
}
------------------------------
3 0 -> {
1 1 3 2 6 4 5
1 3 2 6 4 5
...........
}
3 1 -> 16
3 2 -> 48
3 3 -> 42
3 4 -> 6
3 5 -> & (all 1)
3 6 -> 8
------------------------------
4 0 -> {
1 1 4 2
1 4 2
.....
}
4 1 -> 16
4 2 -> 48
4 3 -> 21
4 4 -> & (all 1)
4 5 -> 6
4 6 -> 8
4 7 -> {
1 1 4 2
1 4 2
.....
}
------------------------------
5 0 -> {
1 1 5 4 6 2 3
1 5 4 6 2 3
...........
}
5 1 -> 6
5 2 -> 48
5 3 -> & (all 1)
5 4 -> 48
5 5 -> 24
5 6 -> 14
5 7 -> {
1 1 5 4 6 2 3
1 5 4 6 2 3
...........
}
------------------------------
6 0 -> {
1 1 6
1 6
...
}
6 1 -> 32
6 2 -> & (all 1)
6 3 -> 24
6 4 -> 48
6 5 -> 42
6 6 -> 3 -> {
1 1 5
.....
}
6 7 -> {
1 1 6
1 6
...
}
------------------------------

  ②正解骗分

    mod 7 ?

    这显然会是一个很小的数,如果一旦连续 2 次 mod 7 为 1,

    那么又会重新开始,你就发现这是一个周期函数!

    所以可以先模拟出周期函数,遇到第二个周期就 break 掉,变成一个循环结,询问时模上个周期就行

  ③正解

    矩阵快速幂的板子题:

    转置矩阵为  A 1

           B 0

代码酱=u=

①令人窒息的打表操作(95——那个点自生自灭吧...不会...我记得应该是第10个来着)

#include <iostream>
#include <cstdio>
#include <cstring>
#define LL long long
#define INF 2147483648
using namespace std; inline LL read() {
LL x=,f=;
char c=getchar();
while(c<'' || c>'') {
if(c=='-') f=-;
c=getchar();
}
while(c>='' && c<='') x=x*+c-,c=getchar();
return x*f;
} const int mod = ;
const int M = ;
const int x[mod][mod][M] = {
{{,,,},{,,,},{,,,,,,,,},{,,,,,,,,,,,,,,},{,,,,,,,,},{,,,,,,,,,,,,,,},{,,,,,,}},
{{,,,},{,,,,,,,,,,,,,,,,,,},{,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,}},
{{,,,,,},{,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,}},
{{,,,,,,,,},{,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,},{,,,},{,,,,,,,,,,}},
{{,,,,,},{,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,},{,,,},{,,,,,,,,},{,,,,,,,,,,}},
{{,,,,,,,,},{,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,}},
{{,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,},{,,,,}}
};
const int Mod[mod][mod] = {
{, , ,, ,, },
{,, ,,,, },
{, ,, ,,, },
{,,,, , , },
{,,,, , , },
{, ,, ,,,},
{,, ,,,, }
}; int main() {
freopen("attack.in","r",stdin);
freopen("attack.out","w",stdout);
LL A,B,n,p,q;
A=read()%mod,B=read()%mod,n=read();
p=Mod[A][B];
q=(n+p)%p;
if(B==) q+=;
if(A!= && B!= && p== && q==) {
printf("");
return ;
}
printf("%d",x[A][B][q]);
fclose(stdin);fclose(stdout);
return ;
}

——>表的生成:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std; const int Mod[][] = {
{, , ,, ,, },
{,, ,,,, },
{, ,, ,,, },
{,,,, , , },
{,,,, , , },
{, ,, ,,,},
{,, ,,,, }
}; int main() {
LL A,B,p,f[],now=;
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
while(cin>>A>>B) {
A%=,B%=;
memset(f,,sizeof(f));
f[]=f[]=,f[]=(A+B)%;
p=Mod[A][B];
for(int i=; i<=p+; i++) f[i]=(A*f[i-]+B*f[i-])%;
now++;
now%=;
printf("{");
if(now==) printf("{");
for(int i=; i<=p+; i++) printf("%d,",f[i]);
printf("%d}",f[p+]);
if(!now) printf("},\n");
else printf(",");
//这样的表最后要删除最后一个",",懒得弄了....
}
return ;
}

②正解骗分(AC)

#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<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,aa,bb;
struct matrix {
ll a[][];
matrix() {
memset(a,,sizeof(a));
}
matrix(ll b[][]) {
for(int i=; i<; i++)for(int j=; j<; j++)a[i][j]=b[i][j];
}
matrix operator * (matrix b) {
matrix ans;
for(int i=; i<; i++)
for(int j=; j<; j++)
for(int k=; k<; k++)
ans.a[i][j]=(ans.a[i][j]+a[i][k]*b.a[k][j])%;
ans.a[][]%=;
return ans;
}
} S,T; inline ll read() {
ll 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() {
freopen("attack.in","r",stdin);
freopen("attack.out","w",stdout);
while(scanf("%lld%lld%lld",&aa,&bb,&n)!=EOF) {
n-=;
if(n==-) {
printf("");
return ;
}
ll temp[][]= {{aa,},{bb,}};
T=temp;
ll temp2[][]= {{,},{,}};
S=temp2;
while(n) {
if(n&) S=S*T;
T=T*T;
n>>=;
}
S.a[][]%=;
printf("%lld",S.a[][]);
}
return ;
}

----------------------------------T2----------------------------------

——>物理和生物老师的战争

题目描述

物。万物也。牛为大物。牛为物之大者。故物从牛。与半同意。天地之数起於牵牛。戴先生原象曰。牵牛为纪首。

命曰星纪。自周而上。日月之行不起於;牵牛也。按许说物从牛之故。又广其义如此。故从牛。勿声。文弗切。十五部。

总之,物理老师和生物老师因为“物”而吵了起来,物理老师认为,物理是万物之源, 而生物老师认为生物才是万物之源。

所以物理学科带头人和生物学科带头人号召了所有物理、生物老师,进行战斗。

战斗开始前他们需要排队,有 n 个物理老师和 m 个生物老师站在一起排成一列过安检进入打斗场。

物理老师是一个神奇的物种,他们十分严谨,在开始之前就分析过:

如果在任意某一个人往前数(包括这个人) ,生物老师的数量超过了物理老师,根据牛顿三大定律以及开普勒三大定律,这样风水是不太好的。

这时候,物理老师就会引爆核弹。为了构建社会主义和谐社会,你决定避免这一场核战的发生。

所以,请你计算不会引发核弹爆炸的排队方案的概率。

(排队方案不同定义为当且仅当某一位老师不一样,注意不是老师所教的科目不一样。eg:物 A 物 B,物 B 物 A,是不同的方案)

输入输出格式

输入格式:

第一行,Test , 表示测试数据的组数。

每个数据 有两个数 N,M

输出格式:

对于每组数据,输出一个实数(保留到小数点后 6 位,)

输入输出样例

暂无测试点

说明

30%的数据:(Test<=10),(0<=N,M<=1000).

100%的数据:(Test<=9008 ),( 0<=N,M<=20000 ).

思路

  30 分做法:
    暴力枚举每个位置上的老师,判断是否可行
  100 分做法:
    组合数学题
    可以将原问题转化一下,看成是在一个二维平面上行走,物理老师看成移动(1,0),生物老师看成移动(0,1),

    那么到达(N,M)点且路线又不走到 y=x 这条直线上方的路线总数就是答案,这个组合问题很经典,

    方案数为C[m][m+n]-C[m-1][m+n]
    所以可以知道答案就是1-{m/(n+1)}

代码酱=u=

①std

#include <iostream>
#include <cstdio>
using namespace std; 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 T;
double n,m; int main() {
T=read();
while(T--) {
n=read(),m=read();
if(n<m) { puts("0.000000"); continue; }
n++;
double N=n-m;
printf("%.6lf\n",N/n);
}
return ;
}

std

②另一种方法

#include <iostream>
#include <cstdio>
using namespace std; 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 T;
double n,m; int main() {
T=read();
while(T--) {
n=read(),m=read();
if(n<m) { puts("0.000000"); continue; }
n++;
double d=m/n;
printf("%.6lf\n",1.0-d);
}
return ;
}

AC

----------------------------------T3----------------------------------

——>化学竞赛的的大奖

题目描述

XYX 在 CChO(全国化学奥林匹克竞赛)比赛中获得了大奖,奖品是一张特殊的机票。

使用这张机票,可以在任意一个国家内的任意城市之间的免费飞行,只有跨国飞行时才会有额外的费用。XYX 获得了一张地图,地图上有城市之间的飞机航班和费用。

已知从每个城市出发能到达所有城市,两个城市之间可能有不止一个航班。

一个国家内的每两个城市之间一定有不止一条飞行路线, 而两个国家的城市之间只 有一条飞行路线。

XYX想知道, 从每个城市出发到额外费用最大的城市, 以便估算出出行的费用, 请你帮助他。

当然,你不能通过乘坐多次一个航班增加额外费用, 也就是必须沿费用最少的路线飞行。

输入输出格式

输入格式:

第一行,两个整数 N,M,表示地图上有 N 个城市,M 条航线。

接下来 M 行,每行三个整数 a,b,c,表示城市 a,b 之间有一条费用为 c 的航线。

输出格式:

共 N 行,第 i 行为从城市 i 出发到达每个城市额外费用的最大值。

输入输出样例

暂无测试点

说明

对于 40%的数据 1<=N<=1000,1<=M<=1000

对于 100%的数据 1<=N<=20000,1<=M<=200000

思路

什么求 SCC(强联通分量),缩点 [NOIP2015 Day1 T2],什么两次 dfs/树形 DP 求出树的直径的两个端点 A,B

不会.弃疗.

代码酱=u=

#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 ;
}

----------------------------------------------------------------------

小结=u=

果然还是好好的做好第一题比较重要qaq

2017.11.7 Noip2017 考前模拟赛的更多相关文章

  1. 2017.11.8 Noip2017 考前模拟赛

    ----------------------------------T1---------------------------------- ——>足球联赛 题目描述 巴蜀中学新一季的足球联赛开 ...

  2. 2019.11.9 csp-s 考前模拟

    2019.11.9 csp-s 考前模拟 是自闭少女lz /lb(泪奔 T1 我可能(呸,一定是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通 ...

  3. 2017.9.17校内noip模拟赛解题报告

    预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Ti ...

  4. 2016.11.6 night NOIP模拟赛 考试整理

    题目+数据:链接:http://pan.baidu.com/s/1hssN8GG 密码:bjw8总结: 总分:300分,仅仅拿了120份. 这次所犯的失误:对于2,3题目,我刚刚看就想到了正确思路,急 ...

  5. 【NOIP考前模拟赛】纯数学方法推导——旅行者问题

    一.写在前面 这题似乎是一道原创题目(不是博主原创),所以并不能在任何OJ上评测,博主在网盘上上传了数据(网盘地址:http://pan.baidu.com/s/1mibdMXi),诸位看官需者自取. ...

  6. 【XJOI】【NOI考前模拟赛7】

    DP+卡常数+高精度/  计算几何+二分+判区间交/  凸包 首先感谢徐老师的慷慨,让蒟蒻有幸膜拜了学军的神题.祝NOI2015圆满成功 同时膜拜碾压了蒟蒻的众神QAQ 填填填 我的DP比较逗比……( ...

  7. 2017.11.7~8模拟测试总结---暨NOIP2017考前对策

    最后两天了,第三天就是NOIP2017--Day1了. 刚刚考完了这个学期从开学以来的最后一场模拟赛了.首先要对于这场模拟赛做一次深刻的反思. 考完才猛地惊叹这是最后一场模拟赛了,然而题目并不难,也保 ...

  8. [OI笔记]NOIP2017前(退役前)模拟赛的总结

    好久没写blog了- 在noip2017前的最后几天,也就是在我可能将要AFO的前几天写点东西吧- 记录这最后几个月打的那些大大小小的模拟赛 一些比赛由于不允许公开所以就没有贴链接跟题面了- 2017 ...

  9. NOIp2017真题模拟赛 By cellur925

    果然我还是最菜的==不接受反驳 (先考了day2喵喵喵) Day2 T1:奶酪 期望得分:100分 实际得分:100分 考察:并查集 思路:这题其实之前做过了==.思路还是比较清晰的,读入时预处理出可 ...

随机推荐

  1. 游记-NOI2019

    Day -18 被各路julao们轮番吊打-- Day -12 鸽子F发布了笔试题库,然而并没有 "MLE全场记零分" 的操作 Day -8 广二体育馆机器装配完毕,误闯开幕式表演 ...

  2. Oracle触发器编译错误及解决方案

    错误 TRIGGER **** 编译错误 错误:PLS-00103: 出现符号 "END"在需要下列之一时:        ( begin case declare exit    ...

  3. 一行css代码搞定响应式布局

    在这篇文章中,我将教你如何使用 CSS Grid 来创建一个超酷的图像网格图,它将根据屏幕的宽度来改变列的数量.最精彩的地方在于:所有的响应特性被添加到了一行 css 代码中.这意味着我们不必将 HT ...

  4. springboot下@webfilter的使用

    启动类加了@ServletComponentScan,无论过滤器类加不加@Componment urlPatterns = {"/test/*"}都可以生效 单使用@Compone ...

  5. php的文件上传及下载,附带显示文件及目录

    主页面wenjianceshi.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  6. SAP Marketing Cloud功能简述(三) 营销活动内容设计和产品推荐

    Grace的前两篇文章: SAP Marketing Cloud功能简述(一) : Contacts和Profiles SAP Marketing Cloud功能简述(二) : Target Grou ...

  7. 【前端开发】ES6知识点系统化梳理笔记

    >ES6扩展: #Map和Set是es6标准新增的数据类型 ##Map是key-value(关键字-值),Map允许修改value,不允许修改key,Map支持下标操作 var m = new ...

  8. 基于数组的shell脚本编写

    基于数组的shell脚本编写 2017年08月17日 22:56:36 momokuku123 阅读数:369 数据:变量,文件,数组 变量:存储单个元素的内存中的一块存储空间 数组:存储多个元素的内 ...

  9. cdh的web管理界面503

    503 Service Unavailable No server is available to handle this request.       重启 agent  以及 server   

  10. 25道Shell面试题

    1. 用sed修改test.txt的23行test为tset: sed –i ‘23s/test/tset/g’ test.txt 2. 查看/web.log第25行第三列的内容. sed –n ‘2 ...