题目传送门

A 求余来咯

B 乘法考验

C 回文树

D 构造题

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乘法考验

思路

要有kk个0就要有kk个2和kk个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构造题

思路

这里我们发现逆序队和正序队的何为n(n1)/2n*(n-1)/2,正序队的和是n(n1)/4n*(n-1)/4,我们可以根据这一点去构造,先从小到大摆1,2,3,,x1,2,3,……,x所对应的逆序对和为n,n1,n2,nx+1n,n-1,n-2,……,n-x+1,但最后可能还剩yy个逆序对分配,那么我们怎么办呢,因为后面的排列是这样的n,n1,n2,,x+1n,n-1,n-2,……,x+1,那么我们交换一下:n1,n,n2,,x+1n-1,n,n-2,……,x+1,这样正序队就可以加11了,所以假设我们还剩bb,那么我们先输出nbn-b,然后正常倒序输出,遇到nbn-b跳过

代码

#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;	
}

错的点

规律错了,以后要认真想