AtCoder Beginner Contest 125
はい。
https://atcoder.jp/contests/abc125
ooox 928(-9)でした。
A - Double Helix
Python3
a,b,t=map(int,input().split()) print(t//a*b)
#include<bits/stdc++.h> using namespace std; #define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c) int main(){ int a,b,t; sc3(a,b,t); printf("%d\n",t/a*b); return 0; }
t//aでAの倍数秒後を求めてB枚との積が解になるはず。+0.5秒後はA秒後ジャストはビスケットが出来ている、出来ていないの解釈違いの対策ですかね??
B - Resale
Python3
n=int(input()) v=[int(i) for i in input().split()] c=[int(i) for i in input().split()] ans=0 for i in range(n): if v[i]-c[i]>0: ans+=v[i]-c[i] print(ans)
#include<bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;++i) #define sc1(a) scanf("%d",&a) int main(){ int mod=1000000007; int n,ans=0; sc1(n); int v[n],c[n]; rep(i,n) sc1(v[i]); rep(i,n) sc1(c[i]); rep(i,n) if (v[i]>c[i]) ans+=v[i]-c[i]; printf("%d\n",ans); return 0; }
価値>コストの宝石を全部取る。
C - GCD on Blackboard
Python3
n=int(input()) a=[int(i) for i in input().split()] d={} for i,j in enumerate(a): if i<2: k=1 while 1: if k*k>j: break if j%k==0: if k in d: d[k]+=1 else: d[k]=1 if j%k==0 and k*k!=j: if j//k in d: d[j//k]+=1 else: d[j//k]=1 k+=1 else: for k in d: if j%k==0: if k in d: d[k]+=1 elif j%k==0 and k*k!=j: if j//k in d: d[j//k]+=1 ans=chk=0 for i in d: if d[i]>=n-1: ans=max(ans,i) print(ans)
任意の2つの数の約数を調べます。解は必ず調べた約数の中からになります。問題文で、整数を1つ選んで書き換え、同じ整数でも~の条件が前提となっているためです。
C++はうまく書けないので後で
D - Flipping Signs
Python3
int(input()) a=[int(i) for i in input().split()] b=[abs(int(i)) for i in a] c=[int(i) for i in a if i<0] print(sum(b)-[0,min(b)*2][len(c)%2])
#include<bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;++i) #define sc1(a) scanf("%d",&a) int main(){ bool f=0; int n; long long a,b=0ll,x=2e9; sc1(n); rep(i,n){ scanf("%lld",&a); if (a<0) f=f^1; b+=abs(a); x=min(x,abs(a)); } printf("%lld\n",f?b-x*2:b); return 0; }
負の数が奇数個ならどんなに操作を繰り返して工夫しても1つだけ負の数が残る、偶数個なら負の数が全て正の数になる。奇数個なら絶対値の総和から最小の数を2回引いたものが解、偶数個ならそのまま絶対値の総和が解。