はい。コンテスト中がbetaサイトが重かった。
ooo- 978(+24)
https://atcoder.jp/contests/abc113
A - Discount Fare
x,y=map(int,input().split())
print(x+y//2)
#include<bits/stdc++.h>
using namespace std;
#define sc2(a,b) scanf("%d %d",&a,&b)
int main(){
int x,y;
sc2(x,y);
printf("%d\n",x+y/2);
return 0;
}
問題文の指示通りに計算。Yは偶数が保証されているので割り切れない数とか気にする必要なし。
B - Palace
n=int(input())
t,a=map(int,input().split())
h=[int(i) for i in input().split()]
ans=[0,abs(a-(t-h[0]*0.006))]
for i in range(1,n):
tmp=abs(a-(t-h[i]*0.006))
if tmp<ans[1]: ans=[i,tmp]
print(ans[0]+1)
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define sc1(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d %d",&a,&b)
int main(){
int mod=1000000007;
int n,t,a,m,ans,chk=mod*2;
sc1(n);
sc2(t,a);
t*=1000; a*=1000;
rep(i,n) {
sc1(m);
if (chk>abs(a-(t-m*6))) {
chk=abs(a-(t-m*6));
ans=i+1;
}
}
printf("%d\n",ans);
return 0;
}
気温を計算して絶対値で最も近いものを保存しておいて最後に出力。気温の計算の()とか微妙にミスして無駄にWA。
えーと、、こういう問題では基本的に小数点以下の数を信じてはいけないので回避出来るときは回避しましょう。
C - ID
n,m=map(int,input().split())
d=[[] for i in range(n)]
ans=[]
for i in range(m):
p,y=map(int,input().split())
d[p-1].append((y,i))
for a,i in enumerate(d):
i.sort()
for b,j in enumerate(i):
c=str(a+1)
d=str(b+1)
c="0"*(6-len(c))+c
d="0"*(6-len(d))+d
ans.append((j[1],c+d))
ans.sort()
for i in ans:
print(i[1])
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++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)
int main(){
int mod=1000000007;
int n,m,chk=-1,ans;
sc2(n,m);
vector <pair<int,int>> w;
vector <pair<int,int>> s;
map <pair<int,int>,int> t;
rep(i,m) {
int a,b;
sc2(a,b);
w.push_back({a,b});
s.push_back({a,b});
}
sort(w.begin(),w.end());
rep(i,m) {
if (w[i].first!=chk) {
t[{w[i].first,w[i].second}]=1;
chk=w[i].first;
} else {
t[{w[i].first,w[i].second}]=t[{w[i-1].first,w[i-1].second}]+1;
}
}
rep(i,m) {
printf("%06d%06d\n",s[i].first,t[{s[i].first,s[i].second}]);
}
return 0;
}
市を県に付属させて入力の番目も合わせて保存。県ごとに付属している市を誕生年でナンバリング。最後にまとめて入力の番目で出力。
D - Number of Amidakuji
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;++i)
#define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c)
int main(){
int mod=1000000007;
int h,w,k;
sc3(h,w,k);
vector<vector<int> > dp(h+1, vector<int> (w,0)); dp[0][0]=1;
rep(i,h) rep(j,w) for (int p=0;p < 1<<(w-1);p++) {
bool ok=1;
rep(l,w-2) if (((p>>l) & 1) && ((p>>(l+1)) &1)) ok=0;
if (ok) {
if (j>=1 && ((p >> (j-1))&1)) {
dp[i+1][j-1]+=dp[i][j];
dp[i+1][j-1]%=mod;
} else if (j<=w-2 && ((p>>j)&1)) {
dp[i+1][j+1]+=dp[i][j];
dp[i+1][j+1]%=mod;
} else {
dp[i+1][j]+=dp[i][j];
dp[i+1][j]%=mod;
}
}
}
printf("%d\n",dp[h][k-1]);
return 0;
}
解説から写経しただけです。あとで内容消化を