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 ...