[PYTHON] Critique du concours AtCoder Débutant 181

Les résultats de cette fois

Aucun

Impressions de cette époque

Cette fois, il avait environ 30 minutes de retard. A ~ D a été terminé en environ 20 minutes, et E a été terminé en environ 20 minutes, mais je n'ai choisi aucun sous-marin pour éviter la baisse de taux.

Je voulais le sortir après la résolution de F, mais je n'ai pas eu l'idée d'Union Dinf. C'était un problème difficile.

(Je n'ai pas écrit de commentaire après le problème D. Je le mettrai à jour plus tard dans la journée.)

Problème A

La couleur change par hasard.

A.py


print(["White","Black"][int(input())%2])

A.pas


var
    n:Smallint;
begin
	read(n);
    if (n mod 2)=1 then
        writeln('Black')
    else
        writeln('White');
end.

Problème B

Au début, je pensais qu'un seul numéro serait écrit pour chaque numéro en raison d'une mauvaise lecture, mais comme ce n'est pas un seul, tout ce que vous avez à faire est de trouver la somme des nombres que vous avez écrits.

B.py


n=int(input())
ans=0
for i in range(n):
    a,b=map(int,input().split())
    ans+=(a+b)*(b-a+1)//2
print(ans)

Problème C

J'ai cherché sur Google parce que j'ai oublié, mais ** Pour avoir les trois points $ A, B, C $ sur la même ligne droite, le produit extérieur de $ \ vec {AB}, \ vec {BC} $ doit être égal à 0 est**.

Par conséquent, vous pouvez écrire trois candidats avec $ O (n ^ 3) $ et vérifier s'il y en a même un avec un produit extérieur de 0.

C.py


from math import gcd
n=int(input())
points=[list(map(int,input().split())) for i in range(n)]
def calc(i,j,k):
    global points,n
    vec1=[points[i][0]-points[j][0],points[i][1]-points[j][1]]
    vec2=[points[i][0]-points[k][0],points[i][1]-points[k][1]]
    return vec1[0]*vec2[1]==vec1[1]*vec2[0]
for i in range(n):
    for j in range(i+1,n):
        for k in range(j+1,n):
            if calc(i,j,k):
                print("Yes")
                exit()
print("No")

Problème D

Il est en cours de mise à jour.

D.py


s=list(map(int,input()))
from itertools import permutations
if len(s)<3:
    for i in permutations(s):
        x=int("".join(map(str,i)))
        if x%8==0:
            print("Yes")
            exit()
    print("No")
    exit()
d=dict()
for i in s:
    if i in d:
        d[i]+=1
    else:
        d[i]=1
for i in range(100,1000):
    if i%8==0:
        x=list(map(int,str(i)))
        c=dict()
        for j in x:
            if j in c:
                c[j]+=1
            else:
                c[j]=1
        for j in c:
            if j not in d:
                break
            else:
                if d[j]>=c[j]:
                    continue
                else:
                    break
        else:
            print("Yes")
            exit()
print("No")

E problème

Il est en cours de mise à jour.

E.py


n,m=map(int,input().split())
h=list(map(int,input().split()))
h.sort()
w=list(map(int,input().split()))
#Uniformité([0,1] [2,3] … [n-3,n-2])
x=[0]
for i in range((n-3)//2+1):
    x.append(h[2*i+1]-h[2*i])
for i in range((n-3)//2+1):
    x[i+1]+=x[i]
#Bizarre([1,2] [3,4] … [n-2,n-1])
y=[0]
for i in range((n-3)//2+1):
    y.append(h[2*i+2]-h[2*i+1])
for i in range((n-3)//2+1):
    y[i+1]+=y[i]
from bisect import bisect_left
ans=10**12
for i in range(m):
    b=bisect_left(h,w[i])
    if b%2==0:
        c=b
    else:
        c=b-1
    ans=min(ans,x[c//2]+(y[-1]-y[c//2])+abs(w[i]-h[c]))
print(ans)

Problème F

Il est en cours de mise à jour.

F.cc


//Options de débogage:-fsanitize=undefined,address

//Optimisation du compilateur
#pragma GCC optimize("Ofast")

//Inclure etc.
#include<bits/stdc++.h>
using namespace std;
typedef int ll;

//macro
//pour boucle
//L'argument est(Variables dans la boucle,Amplitude de mouvement)Ou(Variables dans la boucle,Premier numéro,Nombre d'extrémités)、のどちらOu
//Les variables de boucle sans D sont incrémentées de 1 et les variables de boucle avec D sont décrémentées de 1.
//FORA est une gamme de déclaration(Si c'est difficile à utiliser, effacez-le)
#define REP(i,n) for(ll i=0;i<ll(n);i++)
#define REPD(i,n) for(ll i=n-1;i>=0;i--)
#define FOR(i,a,b) for(ll i=a;i<=ll(b);i++)
#define FORD(i,a,b) for(ll i=a;i>=ll(b);i--)
#define FORA(i,I) for(const auto& i:I)
//x est un conteneur tel que vector
#define ALL(x) x.begin(),x.end() 
#define SIZE(x) ll(x.size()) 
//constant
#define INF 1000000000000 //10^12:∞
#define MOD 1000000007 //10^9+7:Droit commun
#define MAXR 100000 //10^5:Portée maximale de la baie
//Abréviation
#define PB push_back //Insérer
#define MP make_pair //constructeur de paires
#define F first //Le premier élément de paire
#define S second //Le deuxième élément de paire

//Ci-dessous, l'ensemble premier et l'arbre représentent la même chose.
class UnionFind{
public:
    vector<ll> parent; //parent[i]Est le parent de i
    vector<ll> siz; //Un tableau représentant la taille de l'ensemble premier(Initialiser avec 1)
    ll n; //Nombre d'éléments

    //constructeur
    UnionFind(ll n_):n(n_),parent(n_),siz(n_,1){ 
        //Initialiser car la racine de tous les éléments est elle-même
        for(ll i=0;i<n;i++){parent[i]=i;}
    }

    //Obtenez la racine de l'arborescence à laquelle appartient la donnée x(Effectuer également la compression d'itinéraire)
    ll inline root(ll x){
        if(parent[x]==x) return x;
        return parent[x]=root(parent[x]);//La valeur de l'expression d'affectation étant la valeur de la variable affectée, l'itinéraire peut être compressé.
    }

    //Fusionner les arbres x et y
    void inline unite(ll x,ll y){
        ll rx=root(x);//x racine
        ll ry=root(y);//racine de y
        if(rx==ry) return;//Quand dans le même arbre
        //Fusionner un petit ensemble dans un grand ensemble(Fusionné de ry à rx)
        if(siz[rx]<siz[ry]) swap(rx,ry);
        siz[rx]+=siz[ry];
        parent[ry]=rx;//Lorsque x et y ne sont pas dans le même arbre, attachez la racine y ry à la racine x rx
    }

    //Déterminer si l'arbre auquel appartiennent x et y est le même
    bool inline same(ll x,ll y){
        ll rx=root(x);
        ll ry=root(y);
        return rx==ry;
    }
};

typedef tuple<ll,ll,ll> td;

ll n;
pair<ll,ll> xy[101];
UnionFind uf(105);
td edges[5500];


signed main(){
    cout<<fixed<<setprecision(10);
    scanf("%d",&n);
    vector<pair<ll,ll>> xy(n);
    REP(i,n)scanf("%d%d",&xy[i].F,&xy[i].S);
    ll now=0;
    REP(i,n){
        edges[now]={(100-xy[i].S)*(100-xy[i].S),i,n};
        now++;
        edges[now]={(xy[i].S+100)*(xy[i].S+100),i,n+1};
        now++;
        FOR(j,i+1,n-1){
            ll k=(xy[i].F-xy[j].F)*(xy[i].F-xy[j].F);
            ll l=(xy[i].S-xy[j].S)*(xy[i].S-xy[j].S);
            edges[now]={k+l,i,j};
            now++;
        }
    }
    sort(edges,edges+now,[](consttd&l,consttd&r){returnget<0>(l)<get<0>(r);});
    REP(i,now){
        uf.unite(get<1>(edges[i]),get<2>(edges[i]));
        if(uf.same(n,n+1)){
            cout<<sqrt(get<0>(edges[i]))/2<<endl;
            break;
        }
    }
}

Recommended Posts

Critique du concours AtCoder Beginner Contest 152
Critique du concours AtCoder Débutant 160
Critique du concours AtCoder Débutant 178
Critique du concours AtCoder pour débutant 166
AtCoder Débutant Contest 167 Évaluation
Critique du concours AtCoder
AtCoder Débutant Contest 169 Évaluation
Critique du concours AtCoder Débutant 181
AtCoder Débutant Contest 171 Critique
Critique du concours AtCoder pour débutant 182
Critique du concours AtCoder Débutant 180
Critique du concours AtCoder pour débutant 177
AtCoder Débutant Contest 168 Critique
Critique du concours AtCoder
Critique du concours AtCoder pour débutant 172
Critique du concours AtCoder
AtCoder Débutant Contest 175 Critique
Critique du concours AtCoder
Critique du concours AtCoder Beginner Contest 153
Critique du concours AtCoder pour débutant 156
AtCoder Débutant Contest 161 Critique
AtCoder Débutant Contest 170 Critique
Critique du concours AtCoder
AtCoder Débutant Contest 173 Critique
AtCoder Débutant Contest 155 Critique
AtCoder Débutant Contest 162 Évaluation
Concours AtCoder Débutant 177
Concours AtCoder Débutant 172
Concours AtCoder Débutant 173
Concours Atcoder Débutant 153
AtCoder Beginner Contest 066 Revoir les questions précédentes
Concours AtCoder Débutant 181 Remarque
Revue du concours régulier AtCoder 105
Concours AtCoder Débutant 180 Remarque
Concours AtCoder Débutant 182 Remarque
AtCoder Grand Contest 048 Critique
Concours AtCoder pour débutants 156 WriteUp
AtCoder Grand Contest 045 Critique
AtCoder Grand Contest 044 Critique
Concours AtCoder pour débutants 167
Concours AtCoder Débutant 183 Remarque
AtCoder Regular Contest 106 Évaluation
Concours AtCoder Débutant 184 Remarque
AtCoder Grand Contest 046 Critique
Revue du concours régulier AtCoder 104
AtCoder Beginner Contest 102 Revue des questions précédentes
AtCoder Beginner Contest 072 Revue des questions précédentes
AtCoder Beginner Contest 085 Revue des questions précédentes
AtCoder Beginner Contest 062 Revue des questions précédentes
AtCoder Beginner Contest 113 Revue des questions précédentes
AtCoder Beginner Contest 074 Revue des questions précédentes
AtCoder Beginner Contest 051 Revue des questions précédentes
AtCoder Beginner Contest 127 Revue des questions précédentes
AtCoder Beginner Contest 119 Revue des questions précédentes
AtCoder Beginner Contest 151 Revue des questions précédentes
AtCoder Beginner Contest 075 Revue des questions précédentes
AtCoder Beginner Contest 054 Revue des questions précédentes
AtCoder Beginner Contest 110 Revue des questions précédentes