[PYTHON] AtCoder Beginner Contest 181 Bewertung

Die Ergebnisse dieser Zeit

Keiner

Eindrücke dieser Zeit

Diesmal war es ungefähr 30 Minuten zu spät. A ~ D war in ungefähr 20 Minuten fertig und E war in ungefähr 20 Minuten fertig, aber ich habe kein Sub ausgewählt, um den Ratenabfall zu vermeiden.

Ich wollte es veröffentlichen, nachdem F gelöst war, aber ich kam nicht auf die Idee von Union Dinf. Es war ein schwieriges Problem.

(Ich habe nach Problem D keinen Kommentar geschrieben. Ich werde ihn später heute aktualisieren.)

Problem A

Die Farbe ändert sich zufällig.

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.

B-Problem

Zuerst dachte ich, dass aufgrund von Fehlinterpretationen nur eine Nummer für jede Nummer geschrieben werden würde, aber da es nicht nur eine ist, müssen Sie nur die Summe der Zahlen finden, die Sie geschrieben haben.

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)

C-Problem

Ich habe gegoogelt, weil ich es vergessen habe, aber ** Um die drei Punkte $ A, B, C $ auf derselben geraden Linie zu haben, sollte das äußere Produkt von $ \ vec {AB}, \ vec {BC} $ 0 sein. ist **.

Daher können Sie drei Kandidaten mit $ O (n ^ 3) $ ausschreiben und prüfen, ob es überhaupt einen mit einem äußeren Produkt von 0 gibt.

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")

D Problem

Es wird aktualisiert.

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 Problem

Es wird aktualisiert.

E.py


n,m=map(int,input().split())
h=list(map(int,input().split()))
h.sort()
w=list(map(int,input().split()))
#Ebenheit([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]
#Bizarr([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)

F Problem

Es wird aktualisiert.

F.cc


//Debug-Optionen:-fsanitize=undefined,address

//Compileroptimierung
#pragma GCC optimize("Ofast")

//Einschließen usw.
#include<bits/stdc++.h>
using namespace std;
typedef int ll;

//Makro
//für Schleife
//Das Argument ist(Variablen in der Schleife,Bewegungsumfang)Oder(Variablen in der Schleife,Erste Nummer,Anzahl der Enden)、のどちらOder
//Schleifenvariablen ohne D werden um 1 erhöht, und Schleifenvariablen mit D werden um 1 dekrementiert.
//FORA ist ein Bereich für Aussagen(Wenn es schwer zu bedienen ist, löschen Sie es)
#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 ist ein Container wie ein Vektor
#define ALL(x) x.begin(),x.end() 
#define SIZE(x) ll(x.size()) 
//Konstante
#define INF 1000000000000 //10^12:∞
#define MOD 1000000007 //10^9+7:Gemeinsames Recht
#define MAXR 100000 //10^5:Maximale Reichweite des Arrays
//Abkürzung
#define PB push_back //Einfügen
#define MP make_pair //Paarkonstruktor
#define F first //Das erste Element des Paares
#define S second //Das zweite Element des Paares

//Unten repräsentieren die Primzahl und der Baum dasselbe.
class UnionFind{
public:
    vector<ll> parent; //parent[i]Ist der Elternteil von i
    vector<ll> siz; //Ein Array, das die Größe der Primmenge darstellt(Initialisieren Sie mit 1)
    ll n; //Elementanzahl

    //Konstrukteur
    UnionFind(ll n_):n(n_),parent(n_),siz(n_,1){ 
        //Initialisieren, da die Wurzel aller Elemente selbst ist
        for(ll i=0;i<n;i++){parent[i]=i;}
    }

    //Holen Sie sich die Wurzel des Baums, zu dem Daten x gehören(Führen Sie auch eine Routenkomprimierung durch)
    ll inline root(ll x){
        if(parent[x]==x) return x;
        return parent[x]=root(parent[x]);//Da der Wert des Zuweisungsausdrucks der Wert der zugewiesenen Variablen ist, kann die Route komprimiert werden.
    }

    //X- und y-Bäume zusammenführen
    void inline unite(ll x,ll y){
        ll rx=root(x);//x root
        ll ry=root(y);//Wurzel von y
        if(rx==ry) return;//Wenn im selben Baum
        //Kleinen Satz zu großem Satz zusammenführen(Zusammengeführt von ry zu rx)
        if(siz[rx]<siz[ry]) swap(rx,ry);
        siz[rx]+=siz[ry];
        parent[ry]=rx;//Wenn sich x und y nicht im selben Baum befinden, hängen Sie y root ry an x root rx an
    }

    //Bestimmen Sie, ob der Baum, zu dem x und y gehören, identisch ist
    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

AtCoder Anfängerwettbewerb 152 Rückblick
AtCoder Beginner Contest 160 Bewertung
AtCoder Anfängerwettbewerb 178 Bewertung
AtCoder Anfängerwettbewerb 166 Bewertung
AtCoder Anfängerwettbewerb 167 Bewertung
AtCoder Beginner Contest 164 Bewertung
AtCoder Beginner Contest 169 Bewertung
AtCoder Beginner Contest 181 Bewertung
AtCoder Beginner Contest 171 Bewertung
AtCoder Beginner Contest 182 Bewertung
AtCoder Beginner Contest 180 Bewertung
AtCoder Anfängerwettbewerb 177 Rückblick
AtCoder Anfängerwettbewerb 168 Bewertung
AtCoder Beginner Contest 179 Bewertung
AtCoder Beginner Contest 172 Bewertung
AtCoder Anfängerwettbewerb 176 Bewertung
AtCoder Anfängerwettbewerb 175 Bewertung
AtCoder Anfängerwettbewerb 174 Bewertung
AtCoder Beginner Contest 153 Bewertung
AtCoder Anfängerwettbewerb 156 Bewertung
AtCoder Beginner Contest 161 Bewertung
AtCoder Beginner Contest 170 Bewertung
AtCoder Beginner Contest 165 Bewertung
AtCoder Beginner Contest 173 Bewertung
AtCoder Anfängerwettbewerb 155 Bewertung
AtCoder Beginner Contest 162 Bewertung
AtCoder Anfängerwettbewerb 177
AtCoder Anfängerwettbewerb 172
AtCoder Anfängerwettbewerb 173
Atcoder Anfänger Wettbewerb 153
AtCoder Beginner Contest 066 Überprüfen Sie frühere Fragen
AtCoder Anfängerwettbewerb 181 Hinweis
AtCoder Regular Contest 105 Bewertung
AtCoder Anfängerwettbewerb 180 Hinweis
AtCoder Anfängerwettbewerb 182 Hinweis
AtCoder Grand Contest 048 Bewertung
AtCoder Anfängerwettbewerb 156 WriteUp
AtCoder Grand Contest 045 Bewertung
AtCoder Grand Contest 044 Bewertung
AtCoder Beginner Contest 167 Memorandum
AtCoder Anfängerwettbewerb 183 Hinweis
AtCoder Regular Contest 106 Bewertung
AtCoder Anfängerwettbewerb 184 Hinweis
AtCoder Grand Contest 046 Bewertung
AtCoder Regular Contest 104 Bewertung
AtCoder Beginner Contest 102 Rückblick auf frühere Fragen
AtCoder Beginner Contest 072 Rückblick auf frühere Fragen
AtCoder Beginner Contest 085 Rückblick auf frühere Fragen
AtCoder Beginner Contest 062 Rückblick auf frühere Fragen
AtCoder Beginner Contest 113 Rückblick auf frühere Fragen
AtCoder Beginner Contest 074 Rückblick auf frühere Fragen
AtCoder Beginner Contest 051 Rückblick auf frühere Fragen
AtCoder Beginner Contest 127 Rückblick auf frühere Fragen
AtCoder Beginner Contest 119 Rückblick auf frühere Fragen
AtCoder Beginner Contest 151 Rückblick auf frühere Fragen
AtCoder Beginner Contest 075 Rückblick auf frühere Fragen
AtCoder Beginner Contest 054 Rückblick auf frühere Fragen
AtCoder Beginner Contest 110 Rückblick auf frühere Fragen