2017.11.7 Noip2017 考前模拟赛
----------------------------------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 考前模拟赛的更多相关文章
- 2017.11.8 Noip2017 考前模拟赛
----------------------------------T1---------------------------------- ——>足球联赛 题目描述 巴蜀中学新一季的足球联赛开 ...
- 2019.11.9 csp-s 考前模拟
2019.11.9 csp-s 考前模拟 是自闭少女lz /lb(泪奔 T1 我可能(呸,一定是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通 ...
- 2017.9.17校内noip模拟赛解题报告
预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Ti ...
- 2016.11.6 night NOIP模拟赛 考试整理
题目+数据:链接:http://pan.baidu.com/s/1hssN8GG 密码:bjw8总结: 总分:300分,仅仅拿了120份. 这次所犯的失误:对于2,3题目,我刚刚看就想到了正确思路,急 ...
- 【NOIP考前模拟赛】纯数学方法推导——旅行者问题
一.写在前面 这题似乎是一道原创题目(不是博主原创),所以并不能在任何OJ上评测,博主在网盘上上传了数据(网盘地址:http://pan.baidu.com/s/1mibdMXi),诸位看官需者自取. ...
- 【XJOI】【NOI考前模拟赛7】
DP+卡常数+高精度/ 计算几何+二分+判区间交/ 凸包 首先感谢徐老师的慷慨,让蒟蒻有幸膜拜了学军的神题.祝NOI2015圆满成功 同时膜拜碾压了蒟蒻的众神QAQ 填填填 我的DP比较逗比……( ...
- 2017.11.7~8模拟测试总结---暨NOIP2017考前对策
最后两天了,第三天就是NOIP2017--Day1了. 刚刚考完了这个学期从开学以来的最后一场模拟赛了.首先要对于这场模拟赛做一次深刻的反思. 考完才猛地惊叹这是最后一场模拟赛了,然而题目并不难,也保 ...
- [OI笔记]NOIP2017前(退役前)模拟赛的总结
好久没写blog了- 在noip2017前的最后几天,也就是在我可能将要AFO的前几天写点东西吧- 记录这最后几个月打的那些大大小小的模拟赛 一些比赛由于不允许公开所以就没有贴链接跟题面了- 2017 ...
- NOIp2017真题模拟赛 By cellur925
果然我还是最菜的==不接受反驳 (先考了day2喵喵喵) Day2 T1:奶酪 期望得分:100分 实际得分:100分 考察:并查集 思路:这题其实之前做过了==.思路还是比较清晰的,读入时预处理出可 ...
随机推荐
- robot framework 的关键字Continue For Loop 用法
Continue For Loop关键字就是python的continue的意思,跳出本层循环,继续执行下一个循环. 我先举个栗子: :FOR ${index} IN RANGE 5 ...
- openstack-neutron(2)
VXLAN 独立于底层的网络拓扑:反过来,两个 VTEP 之间的底层 IP 网络也独立于 VXLAN.VXLAN 数据包是根据外层的 IP header 路由的,该 header 将两端的 VTEP ...
- 苹果appstore应用名下面的开发者名称填写或修改
最近上架不小心遇到一个问题,开发者名称写错了,放假前大意了,记录一下修改过程,希望碰到同样问题的伙伴不要要着急,下面的内容可能帮你哦. 我们应用的之前的开发者名称是个人的,之前没注意这个问题,以后想注 ...
- JavaScript常用节点类型
一.常用节点类型: nodeType:节点类型 nodeName:节点名称 nodeValue:节点值 1.查看节点类型(控制台操作): 获取元素:var p = document.getElemen ...
- 开始Swift学习之路
Swift出来好几个月了,除了同事分享点知识外,对swift还真没有去关心过.GitHub上整理的学习Swift资料还是很不错的,目前也推出了电子书和PDF格式. Swift的语法和我们平常开发的语言 ...
- Vue父组件像子组件传值--自定义属性
这里有个注意的地方,Vue实例控制app DIV 大组件,我们在div中天加小组件的时候,传值需要创建自定义的属性 之后在通过props:[‘属性名’] 来把父元素data中的数据传递给子组件 < ...
- Nginx的反向代理和负载均衡服务
Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行. ...
- Mysql踩坑 自动更新的时间只允许有一个
执行如下SQL创建表: CREATE TABLE aa ( a INT, b TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, c TIMESTAMP DEFAULT CU ...
- Interval 用法总结
语法:INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}] 该数据类型常用来表示一段时间差, 注 ...
- 记录java+testng运行selenium(二)---定义元素类及浏览器
一: 元素类 整体思路: 1. 根据状态可分可见和不可见两种 2. 同一个路径可以查找单个元素或多个元素 3. 获取元素text或者指定的value值 4. selenium对元素操作有两种,一是通过 ...