CTU abierto Concurso 2019

CTU abierto concurso


Un poco perezoso, sin conclusión, hay tiempo para hacer


D.Beer inundación


Juego E.Beer


Marathon Beer F.

Significado de las preguntas:

N en una línea recta con una cerveza está, estas posiciones cerveza puestos coloca aleatoriamente en una línea recta, objeto de la solicitud es la distancia entre dos puestos sucesivos cerveza debe ser idéntico, e igual a un valor específico especifica K. Cada puestos de cerveza preguntan cuántos metros por lo menos se puede mover la distancia entre ellos es el valor K (para reducir al mínimo el número total de metros para mover todos los puestos de cerveza

ideas:

El tema será los corresponde óptimas solución a un punto de partida, a continuación, la función es la función unimodal, puede ser un tercio.
Desde n <= 1E6, k <= 1E6, por lo que la tercera gama [-1e12,1e12]
100 ciclos a 1E8 complejidad de tiempo, la precisión de centésima 3.

código:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=1e6+6;
int x[maxm];
int n,k;
int check(int st){
    int ans=0;
    for(int i=1;i<=n;i++){
        ans+=abs(x[i]-st);
        st+=k;
    }
    return ans;
}
signed main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        scanf("%lld",&x[i]);
    }
    sort(x+1,x+1+n);
    int l=-1e12,r=1e12;
    int ans=1e18;
    for(int i=1;i<=100;i++){
        int mid=(l+r)/2;
        int midd=(mid+r)/2;
        int a=check(mid);
        int b=check(midd);
        if(a>b){
            l=mid;
        }else{
            r=midd;
        }
        ans=min(ans,min(a,b));
    }
    cout<<ans<<endl;
    return 0;
}

I.Sixpack


J.Beer Visión

Significado de las preguntas:

Da los n puntos (x, y), que es uno de los N puntos obtenidos después de un cierto punto de acuerdo con un vector <X, Y> traducción nuevo punto y el punto original es set.
Tales vectores pueden preguntar cuántas.

ideas:

Están destinados a ser convertido en el título en el conjunto de todos los puntos que satisfacen + x, + Y o -x, -y también tener al menos un punto de ajuste. P. ¿Cómo se pueden seleccionar muchas de estas diferentes x e y. Cálculo de la diferencia entre cada par de puntos para satisfacer los requisitos de X, Y, una diferencia aparece en al menos algunos de los tiempos n / 2 (redondeado). Este x, y al parecer mucho, n. Enumeración determina si se debe legítimo, la complejidad O (n ^ 2).

código:

#include<bits/stdc++.h>
using namespace std;
const int maxm=1e3+5;
int x[maxm],y[maxm];
map<pair<int,int>,int>mark;
map<pair<int,int>,int>xy;
signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i];
        mark[{x[i],y[i]}]=1;
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==j)continue;
            int xx=x[i]-x[j];
            int yy=y[i]-y[j];
            xy[{xx,yy}]++;
        }
    }
    int ans=0;
    for(auto i:xy){
        if(i.second>=(n+1)/2){
            int ok=1;
            int xx=i.first.first;
            int yy=i.first.second;
            for(int i=1;i<=n;i++){
                if(!mark[{x[i]-xx,y[i]-yy}]&&!mark[{x[i]+xx,y[i]+yy}]){
                    ok=0;
                    break;
                }
            }
            if(ok)ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
}

Publicados 430 artículos originales · ganado elogios 36 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_44178736/article/details/104448009
Recomendado
Clasificación