Time:
A
题意
分析
B
题意
分析
C
题意
分析
D
题意
给出a和b,x+y=a,x*y/gcd(x,y)=b
分析
结论:gcd(x,y)=gcd(a,b)
E
题意
分析
F
题意
给出一个s,求出a1+a2+a3+a4+....an=s,中a数组的乘积最大值
分析
czh:先列出前面几项的组成,可以发现规律,每个数将是接近2,3,4,5,6,7,8,9,我们利用前缀和,与前缀乘积,快速得到答案,比赛得适合一味的寻找规律,虽然知道组成,表也打出来了,但还是没做出来
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=1e5+10;
const int mod=1e9+7;
#define ll long long
ll sum[maxn],mul[maxn];
ll qpow(ll a,ll b)
{
ll k=a;
ll res=1;
while(b)
{
if(b&1)res=res*k%mod;
k=k*k%mod;
b/=2;
}
return res;
}
int main()
{
int T,n;
sum[1]=0;
mul[1]=1;
for(int i=2;i<=1e5;i++)
sum[i]=sum[i-1]+i,mul[i]=mul[i-1]*i%mod;
cin>>T;
while(T--)
{
scanf("%d",&n);
if(n==1)
{
printf("1\n");
continue;
}
int st=2,en=1e5;
while(st!=en)
{
int mid=(st+en)/2;
if(sum[mid]>=n)
en=mid;
else st=mid+1;
}
if(sum[st]-n==1)
{
printf("%lld\n",mul[st+1]*qpow(st,mod-2)%mod*qpow(2,mod-2)%mod);
}
else if(sum[st]-n==0)
{
printf("%lld\n",mul[st]);
}
else
{
printf("%lld\n",mul[st]*qpow(sum[st]-n,mod-2)%mod);
}
}
return 0;
}
G
题意
分析
H
题意
分析
I
题意
分析
J
题意
分析
K
题意
分析
Summary:
ym:
czh:无力感
hxx: