AtCoder Beginner Contest 022
はい。
https://beta.atcoder.jp/contests/abc022
A - Best Body
Python2
n,s,t=map(int,raw_input().split()) w=int(raw_input()) ans=chk=0 def chk(a): return 1 if s<=a<=t else 0 ans+=chk(w) for i in range(n-1): w+=int(raw_input()) ans+=chk(w) print ans
全部受け取りながら計算して解を。
B - Bumble Bee
Python2
n=int(raw_input()) l=set([]) ans=chk=0 for i in range(n): a=raw_input() if a in l: ans+=1 else: l.add(a) print ans
同じ数が2回以上出てくるか確認する。
C - Blue Bird
C++14
#include<bits/stdc++.h> using namespace std; typedef vector<vector<int> > Matrix; const int INF=100000000; Matrix d; void warshall_floyd(int n) { for (int i=0;i<n;i++) for (int j=0;j<n;j++) for (int k=0;k<n;k++) d[j][k]=min(d[j][k], d[j][i]+d[i][k]); } int main(){ int mod=1000000007; int n,m,x=0,ans=INF; scanf("%d %d",&n,&m); int b[n]={0}; deque<int> q(n); d=Matrix(n, vector<int>(n,INF)); for (int i=0;i<n;i++) d[i][i]=0; for (int i=0;i<m;i++) { int from,to,cost; scanf("%d %d %d",&from,&to,&cost); if (from!=1) { d[from-1][to-1]=cost; d[to-1][from-1]=cost; } else { b[to-1]=cost; q.push_front(to-1); x++; } } warshall_floyd(n); for (int i=0;i<x-1;i++) { for (int j=i+1;j<x;j++) { int from=min(q[i],q[j]); int to=max(q[i],q[j]); if (d[from][to]!=0) { ans=min(ans,d[from][to]+b[from]+b[to]); } } } printf("%d\n",ans!=INF?ans:-1); return 0; }
方針は立てどもワーシャルフロイドは書き方がわからないのでネット上で探したものを写経しました。
http://dai1741.github.io/maximum-algo-2012/docs/shortest-path/
手打ちでどこか間違えたのか何かよく分かりませんが d[to-1][from-1]=cost
も追加しないとうまく計算できてなかったです。また他にワーシャルフロイド使う問題あったら慣れていきましょう。。