結果
| 問題 |
No.1486 ロボット
|
| コンテスト | |
| ユーザー |
LayCurse
|
| 提出日時 | 2021-04-23 21:49:41 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 3,459 bytes |
| コンパイル時間 | 2,579 ms |
| コンパイル使用メモリ | 210,096 KB |
| 最終ジャッジ日時 | 2025-01-20 23:46:09 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 |
ソースコード
#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template<class T> struct cLtraits_identity{
using type = T;
}
;
template<class T> using cLtraits_try_make_signed =
typename conditional<
is_integral<T>::value,
make_signed<T>,
cLtraits_identity<T>
>::type;
inline int my_getchar_unlocked(){
static char buf[1048576];
static int s = 1048576;
static int e = 1048576;
if(s == e && e == 1048576){
e = fread_unlocked(buf, 1, 1048576, stdin);
s = 0;
}
if(s == e){
return EOF;
}
return buf[s++];
}
inline void rd(long long &x){
int k;
int m=0;
x=0;
for(;;){
k = my_getchar_unlocked();
if(k=='-'){
m=1;
break;
}
if('0'<=k&&k<='9'){
x=k-'0';
break;
}
}
for(;;){
k = my_getchar_unlocked();
if(k<'0'||k>'9'){
break;
}
x=x*10+k-'0';
}
if(m){
x=-x;
}
}
struct MY_WRITER{
char buf[1048576];
int s;
int e;
MY_WRITER(){
s = 0;
e = 1048576;
}
~MY_WRITER(){
if(s){
fwrite_unlocked(buf, 1, s, stdout);
}
}
}
;
MY_WRITER MY_WRITER_VAR;
void my_putchar_unlocked(int a){
if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){
fwrite_unlocked(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout);
MY_WRITER_VAR.s = 0;
}
MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a;
}
inline void wt_L(char a){
my_putchar_unlocked(a);
}
inline void wt_L(long long x){
int s=0;
int m=0;
char f[20];
if(x<0){
m=1;
x=-x;
}
while(x){
f[s++]=x%10;
x/=10;
}
if(!s){
f[s++]=0;
}
if(m){
my_putchar_unlocked('-');
}
while(s--){
my_putchar_unlocked(f[s]+'0');
}
}
template<class T, class U> inline T GCD_L(T a, U b){
T r;
while(b){
r=a;
a=b;
b=r%a;
}
return a;
}
template<class T, class U> inline T LCM_L(T a, U b){
return a/GCD_L(a,b)*b;
}
template<class S, class T> inline S chmin(S &a, T b){
if(a>b){
a=b;
}
return a;
}
long long solve(long long A, long long B, long long C, long long D, long long E){
long long res = 0;
long long t1 = 0;
long long t2 = 0;
long long s;
while(E){
s = E;
if(t1 < A){
chmin(s, A - t1);
}
else{
chmin(s, A+B - t1);
}
if(t2 < C){
chmin(s, C - t2);
}
else{
chmin(s, C+D - t2);
}
if(t1 < A && t2 < C){
res += s;
}
auto Q5VJL1cS = (s);
t1+=Q5VJL1cS;
t2+=Q5VJL1cS;
E -= s;
if(t1 == A+B){
t1 = 0;
}
if(t2 == C+D){
t2 = 0;
}
}
return res;
}
int main(){
long long A;
rd(A);
long long B;
rd(B);
long long C;
rd(C);
long long D;
rd(D);
long long E;
rd(E);
long long res = 0;
long long p;
p =LCM_L(A+B, C+D);
res += solve(A, B, C, D, p) * (E / p);
res += solve(A, B, C, D, E % p);
wt_L(res);
wt_L('\n');
return 0;
}
// cLay version 20210405-1
// --- original code ---
// ll solve(ll A, ll B, ll C, ll D, ll E){
// ll res = 0, t1 = 0, t2 = 0, s;
// while(E){
// s = E;
// if(t1 < A) s <?= A - t1;
// else s <?= A+B - t1;
// if(t2 < C) s <?= C - t2;
// else s <?= C+D - t2;
// if(t1 < A && t2 < C) res += s;
// (t1, t2) += s;
// E -= s;
// if(t1 == A+B) t1 = 0;
// if(t2 == C+D) t2 = 0;
// }
// return res;
// }
//
// {
// ll @A, @B, @C, @D, @E, res = 0, p;
// p = lcm(A+B, C+D);
// res += solve(A, B, C, D, p) * (E / p);
// res += solve(A, B, C, D, E % p);
// wt(res);
// }
LayCurse