- chenshixian 的博客
陈室先的国庆模拟赛DAY04
- @ 2024-10-5 18:33:07
题目传送门
T1求余来咯
思路
直接暴力就可以做了,不会超时
代码
#include<bits/stdc++.h>
using namespace std;
long long a[3333],n,l,r,s=5000000000000000000,p=0;
int main(){
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
cin>>n>>l>>r;
for(long long i=1;i<=n;i++)cin>>a[i];
for(long long i=l;i<=r;i++){
long long su=0;
for(long long j=1;j<=n;j++)su+=a[j]%i;
if(su<s)s=su,p=i;
}
cout<<p;
return 0;
}
T2乘法考验
思路
要有个0就要有个2和个5,所以只要分解质因数在补齐2和5就可以了
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("mul.in","r",stdin);
freopen("mul.out","w",stdout);
long long t;
cin>>t;
while(t--){
long long a,k,s=1;
cin>>a>>k;
long long c2=0,c5=0;
while(a%2==0){
c2++;
a/=2;
}
while(a%5==0){
c5++;
a/=5;
}
for(long long i=1;i<=max(0ll,k-c2);i++)s*=2;
for(long long i=1;i<=max(0ll,k-c5);i++)s*=5;
cout<<s<<"\n";
}
return 0;
}
T4构造题
思路
这里我们发现逆序队和正序队的何为,正序队的和是,我们可以根据这一点去构造,先从小到大摆所对应的逆序对和为,但最后可能还剩个逆序对分配,那么我们怎么办呢,因为后面的排列是这样的,那么我们交换一下:,这样正序队就可以加了,所以假设我们还剩,那么我们先输出,然后正常倒序输出,遇到跳过
代码
#include<bits/stdc++.h>
using namespace std;;
int main(){
freopen("gz.in","r",stdin);
freopen("gz.out","w",stdout);
long long n;
cin>>n;
long long zxd=n*(n-1)/4,x=n-1,l=1;
while(zxd>=x){
zxd-=x;
x--;
cout<<l<<' ';
l++;
}
zxd=n-zxd;
cout<<zxd<<' ';
for(int i=n;i>=l;i--){
if(i==zxd)continue;
else cout<<i<<' ';
}
return 0;
}
错的点
规律错了,以后要认真想