Educativo Codeforces Ronda 100 (Clasificado para Div. 2) B. Encuentre la matriz 奇怪 构造

B. Encuentre el
límite de tiempo de la matriz
por prueba Límite de memoria de 2 segundos por prueba 256 megabytes
entrada entrada
estándar salida salida estándar
Se le proporciona una matriz [a1, a2,…, an] tal que 1≤ai≤109. Sea S la suma de todos los elementos del arreglo a.

Llamemos hermosa a una matriz b de n enteros si:

1≤bi≤109 para cada i de 1 an;
para cada par de números enteros adyacentes de la matriz (bi, bi + 1), bi divide bi + 1 o bi + 1 divide bi (o ambos);
2∑i = 1n | ai − bi | ≤S.
Tu tarea es encontrar una hermosa matriz. Se puede demostrar que siempre existe al menos una hermosa matriz.

Entrada
La primera línea contiene un número entero t (1≤t≤1000) - el número de casos de prueba.

Cada caso de prueba consta de dos líneas. La primera línea contiene un número entero n (2≤n≤50).

La segunda línea contiene n números enteros a1, a2,…, an (1≤ai≤109).

Salida
Para cada caso de prueba, imprima la hermosa matriz b1, b2,…, bn (1≤bi≤109) en una línea separada. Se puede demostrar que existe al menos una hermosa matriz en estas circunstancias. Si hay varias respuestas, imprima cualquiera de ellas.

Ejemplo de entrada
Copiar
4
5
1 2 3 4 5
2
4 6
2
1 1000000000
6
3 4 8 1 2 3
salida Copiar
3 3 3 3 3
3 6
1 1000000000
4 4 8 1 3 3 La
escritura es muy inexplicable, no sé cómo para decirlo, es antes y después Los dos elementos deben satisfacer que la división y la multiplicación en sí deben ser menores que 1, de lo contrario se convierte en 1

#include<iostream>
#include<string>
#include<map>
#include<algorithm>
#include<memory.h>
#include<cmath>
#include<assert.h>
#include<vector>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
int a[maxn],b[maxn];
vector<int>l,r;
void solve(){
    
    
	ll t;
	cin>>t;
	while(t--){
    
    
		ll n;
		cin>>n;
		ll sum=0;
		for(int i=1;i<=n;i++){
    
    
			cin>>a[i];
			sum+=a[i];	
		}
		b[1]=a[1];
        for(int i=2;i<=n;i++)
        {
    
    
            if(a[i]%b[i-1]==0){
    
    
                b[i]=a[i];
            }
            else
            {
    
    
                if(fabs(a[i]-a[i]/b[i-1]*b[i-1])<fabs(a[i]-1))
                    b[i]=a[i]/b[i-1]*b[i-1];
                else{
    
    
                    b[i]=1;
                }
            }
        }
        for(int i=1;i<=n;i++){
    
    
            cout<<b[i]<<' ';
        }
        cout<<endl;
	}
}
int main()
{
    
    
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	solve();
	return 0;
}


Supongo que te gusta

Origin blog.csdn.net/qq_45891413/article/details/111499356
Recomendado
Clasificación