AtCoder Beginner Contest 012
はい。
https://atcoder.jp/contests/abc012
A - スワップ
2つの数のA,Bを入替えて出力
a,b=map(str, raw_input().split()) print b,a
#include<iostream> #include<cmath> #include<string> #include<cctype> #include<vector> #include<numeric> #include<algorithm> using namespace std; int main(){ double pai=3.141592653589; int a,b; scanf("%d %d",&a,&b); printf("%d %d\n",b,a); return 0; }
入替えてというのがスワップのような処理は必要なくてB,Aの順に出力すれば良いと思う。
B - 入浴時間
時間が秒で与えられるのをhh:mm:ssに変換する
n=int(raw_input()) ans=[] ans.append(n/3600) ans.append((n%3600)/60) ans.append(n%60) for i in range(3): ans[i]="{0:0>2}".format(ans[i]) print ':'.join(map(str,ans))
#include<iostream> #include<cmath> #include<string> #include<cctype> #include<vector> #include<numeric> #include<algorithm> using namespace std; int main(){ double pai=3.141592653589; int n; scanf("%d",&n); printf("%02d:%02d:%02d\n",n/3600,(n%3600)/60,n%60); }
3600の商がhhで、その余りと60の商がmm、そして最後に%60で余りでssになると思う。
C - 九九足し算
掛け算九九の解を全て足し算したはずがどこか1つの解を忘れて足し算から抜けている。抜けている掛け算のあり得るものを辞書順で出力
n=int(raw_input()) ans=0 chk=2025-n for i in range(1,10): for j in range(1,10): if i*j==chk: print ' x '.join(map(str,(i,j)))
#include<iostream> #include<cmath> #include<string> #include<cctype> #include<vector> #include<numeric> #include<algorithm> using namespace std; int main(){ double pai=3.141592653589; int n; scanf("%d",&n); for(int i=1;i<10;i++){ for(int j=1;j<10;j++){ if(i*j==2025-n){ printf("%d x %d\n",i,j); } } } return 0; }
本来は2025になるはずらしいのでそうすると九九の解が2025-nになるものがあり得るアレなので2重ループで全部探す。
D - バスと避けられない運命
C++14
#include<bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;++i) #define per(i,n) for(int i=n-1;i>=0;--i) #define sc1(a) scanf("%d",&a) #define sc2(a,b) scanf("%d %d",&a,&b) #define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c) #define sl1(a) scanf("%lld",&a) #define sl2(a,b) scanf("%lld %lld",&a,&b) #define sl3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define PI 3.1415926535897932 //typedef long long ll; int main(){ int mod=1000000007; int n,m; sc2(n,m); int w[n][n]; rep(i,n) rep(j,n) w[i][j]=mod; rep(i,n) w[i][i]=0; rep(i,m) { int a,b,t; sc3(a,b,t); a--; b--; w[a][b]=t; w[b][a]=t; } rep (i,n) rep (j,n) rep (k,n) { w[j][k]=min(w[j][k],w[j][i]+w[i][k]); } int ans=mod,x; rep(i,n) { x=0; rep(j,n) { x=max(w[i][j],x); } ans=min(ans,x); } printf("%d\n",ans); return 0; }
入力を受け取ってからワーシャルフロイドするとそれぞれの頂点から他の頂点への最短が求められています。そこからまたforループでバス停1から移動する場合の最大、バス停2から〜を比較して最大値が解になるはずです。
コンテスト当時はPythonではかなり工夫しないとTLEになるはずだったようですが、ジャッジサーバーが早くなったためにいまはそうでもないようです。