版权声明:原创,未经作者允许禁止转载 https://blog.csdn.net/Mr_wuyongcong/article/details/86612042
前言
翻车的更惨
成绩
是有算别人的
正题
超级变变变【数学】
博客链接:
https://blog.csdn.net/Mr_wuyongcong/article/details/86611138
图的计数【组合数 数论】
博客链接:
https://blog.csdn.net/Mr_wuyongcong/article/details/86611624
回家的路【最短路 拆点】
博客链接:
https://blog.csdn.net/Mr_wuyongcong/article/details/86611809
T1 70分code
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll k,a,b;
ll get_ans(ll x)
{
if(k==1) return max(x,0ll);
else if(k==0) return x+1;
x=max(x,0ll);
ll z=1,ans=0;
while(z*k<=x){
ans+=z;
if(z*k+z-1>x) ans-=z*k+z-1-x;
z*=2;
}
return ans;
}
int main()
{
scanf("%lld%lld%lld",&k,&a,&b);
printf("%lld",get_ans(b)-get_ans(a-1));
}
T2 0code
#include<cstdio>
#define ll long long
using namespace std;
const ll XJQ=1e9+7;
ll n,m,j[10010],z;
ll power(ll x,ll b)
{
ll ans=1;
x%=XJQ;
while(b){
if(b&1) ans=ans*x%XJQ;
x=x*x%XJQ;b>>=1;
}
return ans;
}
int main()
{
scanf("%lld%lld",&n,&m);
j[0]=1;
for(ll i=1;i<=n-2;i++)
j[i]=j[i-1]*i%XJQ;
for(ll i=1;i<=n-1;i++)
z+=i;
printf("%lld",power(n-1+n+z,m-n+1)*j[n-2]%XJQ);
}
总结
T1:开始就想到正确的解法,然后不会。之后去敲后两题了。之后又回来,发现之前思路是对的,结果没有特判偶数就GG了。70分
T2:开始就想到就是在一条链上加边,然后没有主要边是相同的情况,又GG了。0分
T3:这不明显最短路吗?然后写暴力的时候突然想到分层图,就分个层,结果没有判断-1。又GG了。90分
反正就是思路都很好,就是细节问题太多了