Codeforces Ronda # 666 (Div.2)

Oye, es una lástima, así que hice 2 preguntas y perdí 19 puntos ~~

A - Malabarismo con letras

Cuente el número de apariciones de cada letra. Dado que la última se distribuye uniformemente a cada matriz, el número de apariciones de cada letra debe ser un múltiplo de n

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int cnt[30];
int main()
{
    
    
    IO;
    int T;
    cin>>T;
    while(T--)
    {
    
    
        memset(cnt,0,sizeof cnt);
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
    
    
            string s;
            cin>>s;
            for(auto t:s) cnt[t-'a']++;
        }
        bool ok=1;
        for(int i=0;i<26;i++)
            if(cnt[i]%n) 
            {
    
    
                ok=0;
                break;
            }
        if(ok) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

B - Secuencia de potencia

Esta pregunta es violenta, no sé cómo superar la complejidad de la metafísica.

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=100010;
const ll maxn=1e17;
ll a[N];
int main()
{
    
    
    IO;
    int n;
    cin>>n;
    ll maxa=0;
    for(int i=0;i<n;i++) 
    {
    
    
        cin>>a[i];
        maxa=max(maxa,a[i]);
    }
    sort(a,a+n);
    ll res=maxn;
    for(int i=1;i<=100000;i++)
    {
    
    
        ll cnt=abs(a[0]-1);
        ll p=1;
        bool ok=1;
        for(int j=1;j<n;j++)
        {
    
    
            if(p>maxn/i)
            {
    
    
                ok=0;
                break;
            }
            p=p*i;  
            cnt+=abs(p-a[j]);
        }
        if(ok) res=min(res,cnt);
    }
    cout<<res<<endl;
    return 0;
}

C - Múltiplos de longitud

Muy buena pregunta, no me lo esperaba. . .
Primero convierta todos los números del 1 al n-1 en múltiplos de n, de modo que a[i]+a[i]*(n-1)deben ser múltiplos de n. Luego, el último número se convierte en 0 y la tercera parte elimina la matriz completa a 0

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
int n,a[N];
int main()
{
    
    
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    if(n==1)
    {
    
    
        cout<<1<<' '<<1<<'\n'<<-a[1]<<'\n';
        cout<<1<<' '<<1<<"\n0\n";
        cout<<1<<' '<<1<<"\n0\n";
    }
    else
    {
    
    
        cout<<1<<' '<<n-1<<'\n';
        for(int i=1;i<=n-1;i++) cout<<1ll*a[i]*(n-1)<<' ';
        cout<<'\n'<<n<<' '<<n<<'\n';
        cout<<-a[n];
        cout<<'\n'<<1<<' '<<n<<'\n';
        for(int i=1;i<=n;i++)
        {
    
    
            if(i==n) cout<<0<<' ';
            else cout<<-1ll*a[i]*n<<' ';
        }
    }
    return 0;
}

Al realizar el examen, quería cambiar la primera mitad de len1 a un múltiplo de n, y luego cambiar la segunda mitad de len2 a un múltiplo de n. Parece incierto si el sumando puede ser un múltiplo de n. Ahora necesitamos ai + k 1 len 1 = k 2 n a_i + k_1len_1 = k_2nunayo+k1l e n1=k2nk 1 len 1 + k 2 n = ai k_1len_1 + k_2n = a_ik1l e n1+k2norte=unayoSegún el algoritmo euclidiano ampliado, k 1 len 1 + k 2 n = mcd (len 1, n) k_1len_1 + k_2n = mcd (len_1, n)k1l e n1+k2norte=g c d ( l e n1,n ) Siai% gcd (len 1, n) a_i \% gcd (len_1, n)unayo% g c d ( l e n1,n ) no es 0, así que no hay solución. Luego miré a D y descubrí que parecía ser un juego NIM (más tarde resultó ser codicioso), y luego no quise verlo y me quedé dormido.
Pero después de leer la solución, encontré que silen 1 = n - 1 len_1 = n-1l e n1=norte-1 , entoncesmcd (len 1, n) = 1 mcd (len_1, n) = 1g c d ( l e n1,n )=1 No hay situación irresoluble.

D - Juego apedreado

Cada vez que ambas partes eligen la pila con la mayor cantidad de piedras es la mejor solución. La cola de prioridad se puede utilizar para simular el proceso de obtención de piedras. El siguiente código se refiere a la solución del problema de YeHosea. Si la
pila de piedras es más de la mitad del total, la primera mano ganará. Si no excede la discusión de paridad, puede
usar la tabla para encontrar la ley. La conclusión es la misma que en el siguiente código

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=110;
int n,a[N];
int main()
{
    
    
    int T;
    cin>>T;
    while(T--)
    {
    
    
        cin>>n;
        int maxa=0;
        int s=0;
        for(int i=1;i<=n;i++)
        {
    
    
            cin>>a[i];
            s+=a[i];
            maxa=max(maxa,a[i]);
        }
        if(s-maxa<maxa||s%2==1) cout<<"T"<<endl;
        else cout<<"HL"<<endl;
    }
    return 0;
}

Al complementar las preguntas, descubrí que div2 no fue demasiado difícil esta vez, pero había más preguntas para pensar, así que necesito calmarme y pensar.
Vamos ~

Supongo que te gusta

Origin blog.csdn.net/Fighting_Peter/article/details/108318309
Recomendado
Clasificación