6.12高一高考集训欢乐赛

前面是题解,后面是垃圾话

T1 Efim与奇怪的成绩

贪心的找第一个可以四舍五入的,然后往上进位。

T2 Beautiful IP Addresses

因为回文,所以 n7 太长了,不合法,并且只用找一半,爆搜 check 即可。

T3 装饰

结论题?发现两个上界:a+b+c3,a+b+cmax(a,b,c),答案就是两者中较小的一个。
假设 a 最大,

  • a+b+c3b+c,即 a2b+2c,假设我们先拿 3 个都有的,然后我们可以用较多的一个替换这些 3 个都有的中较少的一个,这样一直平衡,最后可以分成 a+b+c3 组。

  • a+b+c3>b+c ,即 a>2b+2c,此时全都拿两个 a,一个 bc 就行。

T4 最大子矩阵Largest Submatrix

枚举 a,b,c,然后就是 玉蟾宫。考虑记一下每个位置最多能往上延伸多少行,然后就相当于在每一行中找面积最大,单调栈板子。

T5 P2051 [AHOI2009] 中国象棋

清新小 DP,观察到每行每列最多填两个,设 fi,j,k 表示填到了第 i 行,有 j 列是空列,有 k 列是只有一个炮的列。

{f[i][j][k]=f[i][j][k]+f[i1][j][k];f[i][j][k]=f[i][j][k]+f[i1][j+1][k1](j+1);f[i][j][k]=f[i][j][k]+f[i1][j][k+1](k+1);f[i][j][k]=f[i][j][k]+f[i1][j+2][k2](j+2)(j+1)/2;f[i][j][k]=f[i][j][k]+f[i1][j+1][k](j+1)k;f[i][j][k]=f[i][j][k]+f[i1][j][k+2](k+2)(k+1)/2;;

直接 DP 即可。

T6 [BZOJ2813 奇妙的Fibonacci]

fi 表示斐波那契数第 i 项,有定理即 gcd(fi,fj)=fgcd(i,j),如果 fifjgcd(fi,fj)=figcd(i,j)=iij,从而有 fifjij,所以就是求 1n 中每个数的约数个数和约数平方和。
该定理证明如下:
引理1:gcd(fn,fn+1)=1
证明:根据 gcd(a,b)=gcd(a,ba),有 gcd(fn,fn+1)=gcd(fn,fn1+fn)=gcd(fn,fn1)==gcd(f1,f2)=1
引理2:fm=fmn1fn+fmnfn+1
证明:设 fn=a,fn+1=b,有 fn+2=a+b,fn+3=a+2b,fn+4=2a+3b,fm=fmn1a+fmnb=fmn1fn+fmnfn+1
根据上面两个引理,可以得出 gcd(fn,fm)=gcd(fn,fmn1fn+fmnfn+1)=gcd(fn,fmnfn+1),根据引理2,有 gcd(fn,fmnfn+1)=gcd(fn,fmn),以此类推,gcd(fn,fmn)=gcd(fn,fmnn)==gcd(f1,fgcd(n,m))=fgcd(n,m),根据更相减损法得证。
显然约数的个数 f(x) 满足互质积性,而约数平方和 sum(x) 也满足互质积性。这个比较显然,不证了。
此时 狄利克雷前缀和 可以解决这个问题,时间复杂度 O(nloglogn),不讲。
此时线性筛就可以解决这个问题。
cnti 表示 i 的最小质因数的次数,fi 表示 i 的约数个数,si 表示 i 除去所有最小质因数后的数,sumi 表示 i 的约数平方和。
x=ip,当 pi 时,cntx=cnti+1,sx=si,fx=fsifp,sumx=fsifp
pi 时,cntx=cnti+1,sx=si,fx=fsi(cntx+1),sumx=sumip2sumsi
还有一个细节,就是 f2=1,可以被任何数整除,所以当询问为奇数时特判加上就好。

#include<bits/stdc++.h>
#define int long long
typedef long long ll;
typedef unsigned long long ull;
inline int read(){char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;}
const int N=1e7+10,mod=1e9+7;
int f[N],sum[N],s[N],p[N],cnt[N],tot;
bool vis[N];
inline int mo(int x){return x<0?(x%mod+mod)%mod:(x>=mod)?x%mod:x;}
signed main(){
freopen("fibo.in","r",stdin);freopen("fibo.out","w",stdout);
std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
int q=read();
int q1=read(),a=read(),b=read(),c=read();
f[1]=1,sum[1]=1;
for(int i=2;i<=c;++i){
if(!vis[i])p[++tot]=i,sum[i]=mo(i*i+1),f[i]=2,s[i]=1,cnt[i]=1;
for(int j=1;j<=tot&&p[j]*i<=c;++j){
int zc=p[j]*i;
vis[zc]=1;
if(i%p[j]==0){
s[zc]=s[i];
cnt[zc]=cnt[i]+1;
f[zc]=(cnt[zc]+1)*f[s[zc]];
sum[zc]=mo(sum[i]*p[j]%mod*p[j]%mod+sum[s[i]]);
break;
}
cnt[zc]=1;
f[zc]=mo(f[p[j]]*f[i]);
sum[zc]=mo(sum[p[j]]*sum[i]);
s[zc]=i;
}
}
int S=0,ans=0;
for(int i=1;i<=q;++i){
S=(S+f[q1]+(q1&1))%mod;
ans=(ans+sum[q1]+4*(q1&1))%mod;
q1=(q1*a+b)%c+1;
}
std::cout<<(ll)S<<'\n'<<(ll)ans<<'\n';
}
点击查看垃圾话
又到六月份了,都过去一年了。
posted @   Ishar-zdl  阅读(64)  评论(5编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示