Forças de código Rodada # 655 (Div. 2) Problema Solução ABCD

Questão A: Questão da
água, desde que todos os elementos sejam definidos como 1.
Código:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
using namespace std;
typedef long long ll;
const int MAXN=2e5+5;
const int mod=1e9+7;
int main()
{
    
    
    int t;
    cin>>t;
    while(t--)
    {
    
    
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
    
    
           cout<<1<<" ";
        }
        cout<<endl;
    }
}

Questão B:
Supondo a <= b, podemos descobrir que quando b é um múltiplo de a, lcm (a, b) atingirá o valor mínimo, ou seja, b = ka. Então a + ka = n, (k + 1) a = n, quanto menor o k, quanto mais próximos a e b estão, menor é b e menor é lcm (a, b). Então vamos encontrar o menor fator de n (exceto 1) e nos livrar dele.
Código:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
using namespace std;
typedef long long ll;
const int MAXN=2e5+5;
const int mod=1e9+7;
ll gcd(ll a, ll b)
{
    
    
    if (b == 0)
        return a;
    else if (a < b)
        return gcd(b, a);
    else
        return gcd(b, a % b);
}

ll lcm(ll a, ll b)
{
    
    
    return a / gcd(a, b) * b;
}
int main()
{
    
    
    int t;
    cin>>t;
    while(t--)
    {
    
    
        int n;
        cin>>n;
        if(n==2)
        {
    
    
            cout<<1<<" "<<1<<endl;
            continue;
        }
        if(n==3)
        {
    
    
            cout<<1<<" "<<2<<endl;
            continue;
        }
        int a1,b1;
        int f=-1;
        for(int i=2;i<=sqrt(n);i++)
        {
    
    
            if(n%i==0)
            {
    
    
                f=1;
               a1=n/i;
               b1=n-a1;
               break;
            }
        }
        if(f==1) cout<<min(a1,b1)<<" "<<max(a1,b1)<<endl;
        else cout<<1<<" "<<n-1<<endl;
    }
}

Pergunta C:
Quando todo a [i] = i na matriz, a resposta é definitivamente 0. Quando há apenas um intervalo contínuo (l = <i <= r) a [i]! = I, opere diretamente o intervalo O número se torna a [i] = i, e a resposta é 1. Quando há dois ou mais intervalos contínuos que não atendem aos requisitos, podemos registrar a posição inicial L do primeiro parágrafo e a posição final R do último parágrafo. Use uma operação para primeiro alterar o intervalo que não atende aos requisitos. Para a [i] = i, do início do último segmento do intervalo -1 posição até o início do primeiro parágrafo pode primeiro se tornar insatisfatório e, em seguida, usar outra operação para tornar esse intervalo legal, então Leva apenas duas vezes para ser concluído e a resposta é 2.
Código:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
#include<vector>
using namespace std;
#define iis std::ios::sync_with_stdio(false); cin.tie(0)
typedef long long ll;
const int MAXN=2e5+5;
const int inf=0x3f3f3f3f;

int a[MAXN];
int main()
 {
    
    
 	int t;
 	cin>>t;
 	while(t--)
 	{
    
    
 		int n;
 		cin>>n;
 		for(int i=1;i<=n;i++)
 		{
    
    
 			cin>>a[i];
 		}
 		int ans=0;
 		int f=0;
 		for(int i=1;i<=n;i++)
 		{
    
    
 			if(a[i]!=i)
 			{
    
    
 				if(f==0)
 				{
    
    
 					f=1;
 					ans++;
 				}
 			}
 			else f=0;
 		}
 		if(ans==0) cout<<0<<endl;
 		else if(ans==1) cout<<1<<endl;
 		else cout<<2<<endl;
 	}
 }

Pergunta D:
Eu não escrevi durante o jogo. Depois de ler a ideia do chefe, provavelmente é assim. Presumimos que o i-ésimo dígito deve ser mantido até o final, então olhe apenas para a esquerda, então o i-décimo dígito deve ser excluído e vai totalmente para a esquerda Pressione, quando chegar a 1, será n à esquerda até que haja apenas um número restante. Quando i é um número ímpar, você pode descobrir que a posição par antes de i será excluída, a posição ímpar será mantida, a posição ímpar depois de i será excluída e a posição par será mantida, caso contrário, quando i for um número par, a posição ímpar antes de i será excluída Se você excluir, a posição par após i será excluída.
Por exemplo, 1 2 3 4 5 6 7.
Quando escolhemos 4 para manter, então 3 exclui -> 1 6 5 6 7, exclui 1 ----> 5 6 13, exclui 6 ----> 18.
Quando escolhemos 5 para manter, então 4 exclui -> 1 2 8 6 7, exclui 2 ----> 6 7 9, exclui 7 ----> 15.
Assim, enumeramos as posições a serem reservadas, usamos o prefixo e encontramos a resposta.

Código:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
using namespace std;
typedef long long ll;
const int MAXN=2e5+5;
const int mod=1e9+7;
ll s[MAXN];
ll a[4][MAXN];
int main()
{
    
    
    int n;
    cin>>n;
    a[1][0]=0;
    a[2][0]=0;
    for(int i=1;i<=n;i++)
    {
    
    
    	cin>>s[i];
    	a[1][i]=a[1][i-1];
    	a[2][i]=a[2][i-1];
    	if(i&1) a[1][i]+=s[i];
    	else a[2][i]+=s[i];
    }
    ll ans=0;
    for(int i=1;i<=n;i++)
    {
    
    
    	if(i&1)
    	{
    
    
    		ans=max(a[1][i]+a[2][n]-a[2][i],ans);
    	}
    	else
    	{
    
    
    		ans=max(ans,a[2][i]+a[1][n]-a[1][i]);
    	}
    }
    cout<<ans<<endl;
}

Acho que você gosta

Origin blog.csdn.net/weixin_45755679/article/details/107294954
Recomendado
Clasificación