Codeforces Ronda # 666

A
https://codeforces.com/contest/1397/problem/A
Simplemente juzgue si el número total de cada letra puede ser divisible por n

#include <cstdio>
int t,n,f=1,a[30];
void rd(){
	char ch;
	for (scanf("%c",&ch); ch<'a' || ch>'z'; ) scanf("%c",&ch);
	for (; ch>='a' && ch<='z'; ) a[ch-'a']++,scanf("%c",&ch);
}
 
int main(){
	scanf("%d",&t);
	for (f=1; t; t--,f=1){
		for (int i=0; i<26; i++) a[i]=0;
		scanf("%d",&n);
		for (int i=1; i<=n; i++) rd();
		for (int i=0; i<=25; i++) if (a[i]%n!=0){
			printf("NO\n");
			f=0;
			break;
		}
		if (f) printf("YES\n");
	}
}

B
siente que c no es muy grande, simplemente enumere c directamente y juzgue.

#include <cstdio>
#include <algorithm>
using namespace std;
long long i,n,c,cnt,ans,C,a[100005];

int main(){
	scanf("%lld",&n);
	ans=-n;
	for (i=1; i<=n; i++) scanf("%lld",&a[i]),ans+=a[i];
	sort(a+1,a+n+1);
	for (c=1; c<=1000000; c++){
		cnt=0;
		for (i=1,C=1; i<=n; i++,C*=c){
			if (C>a[i]) cnt+=C-a[i]; else cnt+=a[i]-C;
			if (cnt>=ans) break;
		}
		if (cnt<ans) ans=cnt;
	}
	printf("%lld",ans);
}

C
https://codeforces.com/contest/1397/problem/C Es
posible que la solución no sea única
1. Primero resto el primer número (a [1]) directamente,
2. Luego uso [2, n] Operar una vez en el intervalo,
3. Finalmente operar una vez en el intervalo [1, n].
Pensándolo bien, encontrará que esto es factible (siempre que los datos tengan una solución, entonces debe ser una solución satisfactoria)
se puede explicar de la siguiente manera: los
dos últimos pasos devolverán [2, n] a cero, que es equivalente a a [i] = A * ( n-1) + B * n. Para cualquier i, solo A y B son números enteros. Por supuesto, hay soluciones, y hay muchas soluciones. Simplemente presione una fórmula simple que lo satisfaga.

#include <cstdio>
long long A[100005],B[100005],a[100005],x,n;

int main(){
	scanf("%lld",&n);
	x=n-1;
	for (int i=1; i<=n; i++) scanf("%lld",&a[i]);
	for (int i=2; i<=n; i++){
		A[i]=-a[i]%n;
		B[i]=(a[i]+A[i])/n-A[i];
	}
	printf("1 1\n%lld\n",-a[1]);
	a[1]=0;
	if (n==1){
		printf("1 1\n0\n1 1\n0");
		return 0;
	}
	printf("2 %lld\n",n);
	for (int i=2; i<=n; i++) printf("%lld ",-A[i]*x),a[i]-=A[i]*x;
	printf("\n1 %lld\n",n);
	for (int i=1; i<=n; i++) printf("%lld ",-a[i]);
}

D
https://codeforces.com/contest/1397/problem/D Utilice el
medidor para encontrar el patrón ...

#include <cstdio>
#include <algorithm>
using namespace std;
int t,n,a[200],S,T,HL;

int main(){
	scanf("%d",&t);
	while (t--){
		//T=HL=0;
		scanf("%d",&n);
		for (int i=1; i<=n; i++) scanf("%d",&a[i]);
		sort(a+1,a+n+1);
		S=0;
		for (int i=1; i<n; i++) S+=a[i];
		if (S<a[n]){
			printf("T\n");
			continue;
		}
		S+=a[n];
		if (S%2) printf("T\n");
		else printf("HL\n");
		/*
		for (int i=1; i<=n; i++){
			if (i%2) T+=a[n-i+1];
			else HL+=a[n-i+1];
		}
		//if (T>HL) printf("T\n");
		//else printf("HL\n");
		*/
	}
} 

E
emmmmm
no hizo ...

Supongo que te gusta

Origin blog.csdn.net/jackypigpig/article/details/108313853
Recomendado
Clasificación