- 阳子墨 的博客
国庆集训 DAY-4
- @ 2024-10-5 19:55:00
T1求余来咯
思路
直接模拟即可(很水)
正确代码
#include<bits/stdc++.h>
using namespace std;
int a[3010];
int main()
{
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
long long n,l,r,k,minn=2e9;
cin>>n>>l>>r;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=l;i<=r;i++)
{
int sum=0;
for(int j=1;j<=n;j++) sum+=a[j]%i;
if(sum<minn)
{
minn=sum;
k=i;
}
}
cout<<k;
return 0;
}
T2乘法考验
错因 没开long long((╬▔皿▔)╯)
思路
a*b末尾有k个0
那么a*b%1ek==0
a*b就含有1ek的质因子
b要越小,就只能是a里没有1ek的乘积,就是1ek/gcd(1ek,a)
正确代码
#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b)
{
if(!b) return a;
else return gcd(b,a%b);
}
long long m(int a,int b)
{
long long ans=1;
for(int i=1;i<=b;i++) ans*=a;
return ans;
}
int main()
{
freopen("mul.in","r",stdin);
freopen("mul.out","w",stdout);
long long t,a,k,cnt=0,ans=1;
cin>>t;
for(int i=1;i<=t;i++)
{
cin>>a>>k;
long long sum=m(10,k);
cout<<sum/gcd(a,sum)<<endl;
}
return 0;
}
T3回文树
暂无
T4构造题
错因
是打表的(呵呵!)
思路
第一个点 的对数是
第二个点 的对数是
第三个点 的对数是
....
总的对数应该是
顺序对和逆序对分别应是
由于总的对数确定那么 只用得到n*(n-1)/4个顺序对就可以了
由于字典序要小,那么小的数尽可能
直到放不了为止。
在放一个n-剩余顺序对数g
再将剩余的逆序摆放
正确代码
#include<bits/stdc++.h>
using namespace std;
long long n,sum,sy,z;
long long qm(long long x)
{
long long i=1;
while(x>=(n-i))
{
x=x-n+i;
cout<<i<<" ";
i++;
z++;
}
return x;
}
int main()
{
freopen("gz.in","r",stdin);
freopen("gz.out","w",stdout);
cin>>n;
sum=n/4*(n-1);
sy=qm(sum);
cout<<n-sy<<" ";
z++;
for(long long i=n;z<=n;i--,z++)
{
if(i==n-sy) continue;
cout<<i<<" ";
}
return 0;
}
```