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