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)

C++

#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)

C++

#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])

C++

#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回引いたものが解、偶数個ならそのまま絶対値の総和が解。