Codeforces Round # 634 (Div. 3) A ~ E1

A - Caramelos y dos hermanas

Tema:

Hay n pedazos de azúcar. La hermana mayor y la hermana menor están divididas. La hermana mayor debe ser menor que la hermana menor. Preguntado por varias situaciones, cada una debe tener una.

Ideas:

La respuesta es (n-1) / 2

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define il inline
#define it register int
#define inf 0x3f3f3f3f
#define lowbit(x) (x)&(-x)
#define pii pair<int,int>
#define mak(n,m) make_pair(n,m)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
const int maxn=1e6+10;
const int mo=1e9;
ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
int t;
int n,m;
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        if(n<3){printf("0\n");}
        else{
            printf("%d\n",(n-1)/2);
        }
    }
	return 0;
}

B - Construir la cadena

Tema:

Hay n, a, b, y una cadena de caracteres de longitud n. Cada una de las cadenas de caracteres tiene b letras diferentes. Se construye y se emite una de ellas.

Ideas:

La primera construcción es una longitud, los primeros elementos b son todos diferentes, el elemento b es el mismo que b, y luego la construcción s comienza a circular después de un elemento

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define il inline
#define it register int
#define inf 0x3f3f3f3f
#define lowbit(x) (x)&(-x)
#define pii pair<int,int>
#define mak(n,m) make_pair(n,m)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
const int maxn=2e3+10;
const int mo=1e9;
ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
int t;
int n,a,b;
char s[maxn];
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&n,&a,&b);
        int c=0,bb=b-1;
        for(it i=0;i<a;i++){
            s[i]='a'+bb;
            if(bb!=0){
                bb--;
            }
        }
        for(it i=0;i<n;i++){
            printf("%c",s[i%a]);
        }
        printf("\n");
    }
	return 0;
}

C - Dos equipos componiendo

Tema:

Hay n personas, ai representa habilidades, n personas tienen que dividirse en dos números iguales de combinaciones, las habilidades de la primera combinación tienen valores de ai diferentes, las habilidades de la segunda combinación tienen el mismo valor de ai, pregunte cuál es el mayor número de las mismas.

Ideas:

Cuente las estadísticas de un ai que aparece una vez (ans), cuente la aparición de ai repetido, el número de estadísticas (ge) y la cantidad máxima de estadísticas (maxx). La respuesta es max (min (ans + ge, maxx-1), min (ans + ge-1, maxx));

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define il inline
#define it register int
#define inf 0x3f3f3f3f
#define lowbit(x) (x)&(-x)
#define pii pair<int,int>
#define mak(n,m) make_pair(n,m)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
const int maxn=2e5+10;
const int mo=1e9;
ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
int t;
int n;
int a[maxn],cnt[maxn];
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        map<int,int>mp;int ge=0;
        for(it i=0;i<n;i++){
            scanf("%d",&a[i]);
            if(mp[a[i]]==0){
                mp[a[i]]=++ge;
                cnt[ge]=1;
            }
            else{
                cnt[mp[a[i]]]++;
            }
        }
        int ans=0,maxx=0,g1=0;
        for(it i=1;i<=ge;i++){
            if(cnt[i]==1){ans++;}
            else{g1++;}
            maxx=max(cnt[i],maxx);
        }
        int sheng=g1+ans;
        printf("%d\n",max(min(g1+ans,maxx-1),min(g1+ans-1,maxx)));
    }
	return 0;
}

D - Anti-Sudoku

Tema:

Para el Sudoku 9 * 9, se requiere que se convierta en cada fila y columna, y aparecen 2 números idénticos en cada cuadrícula 3 * 3.

Ideas:

Simplemente cambie de 1 a 2.

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define il inline
#define it register int
#define inf 0x3f3f3f3f
#define lowbit(x) (x)&(-x)
#define pii pair<int,int>
#define mak(n,m) make_pair(n,m)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
const int maxn=2e5+10;
const int mo=1e9;
ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
int t;
int n;
char s[10][10];
int main(){
    scanf("%d",&t);
    while(t--){
        for(it i=0;i<9;i++){
            scanf("%s",s[i]);//printf("\n%s\n",s[i]);
        }
        for(it i=0;i<9;i++){
            for(it j=0;j<9;j++){
                if(s[i][j]=='1'){
                    s[i][j]='2';
                }//cout<<s[i][j]<<endl;
            }
        }
        for(it i=0;i<9;i++){
            printf("%s\n",s[i]);
        }
    }
	return 0;
}

E1 - Palindrome de tres bloques (versión fácil)

Tema:

Definamos un palíndromo de tres bloques como la secuencia, que consta de como máximo dos elementos distintos (que estos elementos sean a y b, a puede ser igual a b) y es el siguiente: [a, a, ..., a 【x】, b , b, ..., b 【y】, a, a, ..., a 【x】]. Allí x, y son enteros mayores o iguales a 0. Por ejemplo, las secuencias [], [2], [1,1], [1,2,1], [1,2,2,1] y [1 , 1,2,1,1] son ​​palíndromos de tres bloques, pero [1,2,3,2,1], [1,2,1,2,1] y [1,2] no lo son.

Su tarea es elegir la subsecuencia máxima por longitud de un palíndromo de tres bloques.
给 n 长度 数组 ai , ai <27 , n <= 2000

Ideas:

Violencia, guarde cada posición de ai, y luego juzgue, vea el código para la operación específica, porque E2 I tle en el ejemplo 10, por lo que no es la respuesta correcta. Pendiente E2, F

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define il inline
#define it register int
#define inf 0x3f3f3f3f
#define lowbit(x) (x)&(-x)
#define pii pair<int,int>
#define mak(n,m) make_pair(n,m)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
const int maxn=2e3+10;
const int mo=1e9;
ll ksm(ll a,ll b){if(b<0)return 0;ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}
int t,n,a;
int cnt[27][maxn];
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        for(it i=0;i<=26;i++){cnt[i][0]=0;}
        for(it i=1;i<=n;i++){
            scanf("%d",&a);
            cnt[a][0]++;cnt[a][cnt[a][0]]=i;
        }
        int maxx=0;
        for(it i=1;i<=26;i++){
            maxx=max(cnt[i][0],maxx);
        }
        for(it i=1;i<=26;i++){
            for(it j=1;j<=26;j++){
                if(j==i || cnt[i][0]==0 || cnt[j][0]==0){continue;}
                int ans=0;
                for(it ii=1;ii<=cnt[i][0]/2;ii++){
                    ans=ii*2;int l=cnt[i][ii],r=cnt[i][cnt[i][0]-ii+1],l1=0,r1=0;
                   // cout<<l<<" "<<r<<endl;
                    for(it jj=1;jj<=cnt[j][0];jj++){
                        if(l<cnt[j][jj]){l1=jj;break;}
                    }
                    for(it jj=cnt[j][0];jj>=1;jj--){
                        if(r>cnt[j][jj]){r1=jj;break;}
                    }
                    //cout<<i<<" "<<j<<" "<<r1<<" "<<l1<<" "<<ii<<endl;
                    if(l1==0 || r1==0 || r1<l1){continue;}

                    ans+=r1-l1+1;maxx=max(ans,maxx);
                }
            }
        }
        printf("%d\n",maxx);
    }
	return 0;
}

Supongo que te gusta

Origin www.cnblogs.com/luoyugongxi/p/12695340.html
Recomendado
Clasificación