Puente Azul Zhenti: Expresión Postfija, Segmentación Plana

texto

expresión postfijo

Tema Descripción

时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分

【问题描述】 

给定 N 个加号、M 个减号以及 N + M + 1 个整数 A1,A2,··· ,AN+M+1,
小明想知道在所有由这 N 个加号、M 个减号以及 N + M +1 个整数
凑出的合法的后缀表达式中,结果最大的是哪一个?
请你输出这个最大的结果。 
例如使用1 2 3 + -,则 “2 3 + 1 -” 这个后缀表达式结果是 4,是最大的。

【输入格式】
第一行包含两个整数 N 和 M。 第二行包含 N + M + 1 个整数 A1,A2,··· ,AN+M+1。

【输出格式】
输出一个整数,代表答案。

【样例输入】 
1 1 1 2 3
【样例输出】 
4
【评测用例规模与约定】 
对于所有评测用例,0≤ N,M ≤100000,−109 ≤ Ai ≤109

Ideas y códigos de temas

Hay dos casos:

  • La primera: En el caso de que no tenga signo negativo, simplemente súmalos todos directamente.
  • El segundo caso: hay signos más y signos menos, no importa cómo los ingrese, podemos tomar el valor máximo menos el valor mínimo y agregar el valor absoluto del número restante.
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll maxn=1e6+10;
ll n,m;
ll a[maxn],b[maxn];
ll cnt;
ll sum=0,sum1;
ll cnt1=0;
int main(){
    
    
    cin>>n>>m;
    for(int i=1;i<=n+m+1;i++){
    
    
        cin>>a[i];
        sum1+=a[i];
    }
    sort(a+1,a+1+n+m+1);
    if(m==0)cout<<sum1;
    else{
    
    
        sum=a[n+m+1]-a[1];
        for(int i=2;i<=n+m;i++){
    
    
            sum+=abs(a[i]);
        }
        cout<<sum;
    }
    return 0;
}

Segmentación de planos

Tema Descripción

Descripción del problema
Hay una línea recta en un plano, donde la primera línea recta es .

Calcula las rectas que dividen el plano en secciones.

Formato de entrada
La primera línea contiene un número entero.

Las siguientes N líneas, cada una de las cuales contiene dos números enteros.

Formato de salida
Un número entero que representa la respuesta.

样例输入
3
1 1
2 2
3 3
Data
样例输出
6

Ideas y códigos de temas

Idea: Primero, desduplicar los datos de entrada a través del contenedor establecido.Según "La contribución al aumento del número de planos para cada línea adicional es el número de intersecciones con la línea anterior (excluyendo los puntos que se superponen con la intersección existente) + 1 "Las conclusiones se acumulan y se puede generar el resultado final.
Código:

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<double,double> P;
set<P> se;
const ll maxn=1e6+10;
ll n;
ll a[maxn],b[maxn];
int main(){
    
    
    cin>>n;
    for(int i=1;i<=n;i++){
    
    
        ll x,y;
        cin>>x>>y;
        se.insert(make_pair(x,y));
    }
    int n=0;
    for(set<P>::iterator it=se.begin();it!=se.end();it++){
    
    
        a[n]=(*it).first;
        b[n]=(*it).second;
        n++;
    }
    se.clear();
    ll ans=2;
    for(int i=1;i<n;i++){
    
    
        for(int j=i-1;j>=0;j--){
    
    
            if(a[i]==a[j])continue;
            double x=(b[i]-b[j])*1.0/(a[j]-a[i]);
            double y=a[i]*(x)+b[i];
            se.insert(make_pair(x,y));
        }
        ans+=se.size()+1;
        se.clear();
    }
    cout<<ans;
    return 0;
}

Epílogo


"Si estás indeciso, puedes preguntarle a la brisa primaveral, y si la brisa primaveral no habla, seguirás a tu corazón" significa: si tienes dudas sobre algo, pregúntale a la brisa primaveral cómo hacerlo. . "Si no está decidido, puede preguntarle a la brisa primaveral. Si la brisa primaveral no habla, seguirá su corazón". La oración proviene del "Jianlai" escrito por el escritor de Internet "Fenghuo Opera Princes". El texto original es: "Si estás indeciso, puedes preguntarle a la brisa primaveral. Sigue tu corazón".

inserte la descripción de la imagen aquí


Supongo que te gusta

Origin blog.csdn.net/weixin_46627433/article/details/124028762
Recomendado
Clasificación