2019年燕山大学大学生程序设计大赛(二)
简单数学题
“我读了,一发A了,有什么好说的。”“你个彩笔。”机房又传来FT训斥Codeoos的声音。美丽的女孩Codeoos对此感到很委屈。原来,Codeoos遇到一道数学题,她做不出来。但是厉害的FT一眼就秒了!这道数学题是这样的:
输入样例:
3
1
10000
10
输出样例:
1
661912
242110
参考代码
/*
取模性质:a*b%m=((a%m)*(b%m))%m
对于mod=996251,当m>=mod时 有 m!%mod=0;
输入数据有多组,打表即可
*/
#include<iostream>
#include<algorithm>
#include <set>
#include <string>
#include <cstdio>
using namespace std;
const int maxn = 996251;
long long a[maxn];
long long b[maxn];
int main(){
int t,inx=0;
long long c;
a[0]=1;
b[0]=1;
for(int i=1;i<maxn;++i){
a[i]=(a[i-1]*i)%maxn;
b[i]=(b[i-1]*a[i])%maxn;
}
cin>>t;
while(t--){
cin>>c;
if(c>=maxn)cout<<"0\n";
else cout<<b[c]%maxn<<endl;
}
}
滑稽数
最近大恶人了解到一种特殊的数字,他称这种数字为滑稽数。
如果一个数的二进制表示由k+1个连续的1和k个连续的0组成,那么这个数被称为滑稽数。 下面是一些滑稽数的例子:
输入样例:
992
输出样例:
496
参考代码
/*
先把一定范围的内的滑稽数求出来,然后对于n,从大到小判断,是否整除n
*/
#include<iostream>
#include<algorithm>
#include <set>
#include <string>
#include <cstdio>
using namespace std;
int main(){
int a[10];
int t;
int c=1;
int b[20]={1};
for(int i=1;i<20;++i)b[i]=b[i-1]*2;
for(int i=1;i<10;++i)a[c++]=(b[i]-1)*(b[i-1]);
cin>>t;
for(int i=9;i>=1;--i){
if(t%a[i]==0){
cout<<a[i]<<endl;
break;
}
}
}
An easy problem
一天小明正在各种OJ中流窜,突然一头奶牛把小明撞飞,小明被狠狠地撞到一棵树上,这棵树上有n个点,n−1条边,每个节点上都有一个数,规定两个节点之间的距离为这两个节点的路径上的所有节点上的数的异或和,小明必须选出最大的异或和才能离开这棵树。
小明觉得这个问题非常复杂无能狂怒起来,于是这棵树害怕了,退化成一条链使这个问题变得简单起来。
输入样例:
5
1 2 3 4 5
输出样例:
7
提示:[3,4]的异或和最大,所以答案为7
参考代码
/*
用0/1字典树解决异或问题
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
int pre[maxn],n,d;
int tree[32*maxn][2],pos;
int a[32*maxn];
void insert(int x,int p){
int root = 0,b;
for(int i=31;i>=0;--i){
b = (x>>i)&1;
if(!tree[root][b])tree[root][b]=++pos;
root = tree[root][b];
}
a[root]=p;
}
int query(int x){
int root = 0,b;
for(int i=31;i>=0;--i){
b = (x>>i)&1;
if(tree[root][b^1])root=tree[root][b^1];
else root = tree[root][b];
}
return a[root];
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&d);
pre[i]=pre[i-1]^d;
}
insert(pre[0],0);
int ans=0;
for(int i=1;i<=n;++i){
d=query(pre[i]);
ans=max(ans,pre[i]^pre[d]);
insert(pre[i],i);
}
printf("%d\n",ans);
}
The matrix233的简单概率论考试
The matrix233经过一轮紧张的复习终于迎来了刺激的概率论考试。众所周知,概率论考试每个人的题都是按概率随机分配,并且非常简单,因此考试刚开始便有人交卷离开。
而matrix此时也看到了自己的题目:
输入样例:
2
4
1 2 3 4
2 2
1 3
输出样例:
2 0.00
15 1.00
参考代码
/*
*/