結果
| 問題 |
No.1315 渦巻洞穴
|
| コンテスト | |
| ユーザー |
carrot46
|
| 提出日時 | 2020-12-12 00:56:05 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,457 bytes |
| コンパイル時間 | 1,622 ms |
| コンパイル使用メモリ | 172,732 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-19 21:39:01 |
| 合計ジャッジ時間 | 5,088 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 76 RE * 3 |
ソースコード
#include <bits/stdc++.h>
//#include <chrono>
#pragma GCC optimize("O3")
using namespace std;
#define reps(i,s,n) for(int i = s; i < n; i++)
#define rep(i,n) reps(i,0,n)
#define Rreps(i,n,e) for(int i = n - 1; i >= e; --i)
#define Rrep(i,n) Rreps(i,n,0)
#define ALL(a) a.begin(), a.end()
using ll = long long;
using vec = vector<ll>;
using mat = vector<vec>;
ll N,M,H,W,Q,K,A,B;
string S;
using P = pair<ll, ll>;
const ll INF = (1LL<<60);
template<class T> bool chmin(T &a, const T &b){
if(a > b) {a = b; return true;}
else return false;
}
template<class T> bool chmax(T &a, const T &b){
if(a < b) {a = b; return true;}
else return false;
}
template<class T> void my_printv(std::vector<T> v,bool endline = true){
if(!v.empty()){
for(std::size_t i{}; i<v.size()-1; ++i) std::cout<<v[i]<<" ";
std::cout<<v.back();
}
if(endline) std::cout<<std::endl;
}
ll val(P p){
ll x = p.first, y = p.second, d = max(abs(x), abs(y)), r = d * 2 + 1, ms = r * r;
if(y == - d) return ms + x - d;
else if(x == -d) return ms - y - d * 3;
else if(y == d) return ms - x - d * 5;
else return ms + y - d * 7;
}
P pos(ll a){
if(a == 1) return make_pair(0, 0);
ll lb = -1, ub = 100000;
while(ub - lb > 1){
ll cen = (ub + lb) / 2, r = cen*2 + 1;
(a <= r * r ? ub : lb) = cen;
}
ll r = ub * 2, r2 = ub, ms = (r + 1) * (r + 1);
if((ms -= r) < a) return make_pair(-r2 + (a - ms), -r2);
else if((ms -= r) < a) return make_pair(-r2, r2 - (a - ms));
else if((ms -= r) < a) return make_pair(r2 - (a - ms), r2);
else return make_pair(r2, -r2 + (a - (ms - r)));
}
string ans = "";
ll pena;
void move(P p, P q){
ll dx = q.first - p.first, dy = q.second - p.second;
rep(i, dx){
ans.push_back('R');
++p.first;
pena ^= val(p);
}
reps(i, dy, 0){
ans.push_back('D');
--p.second;
pena ^= val(p);
}
rep(i, dy){
ans.push_back('U');
++p.second;
pena ^= val(p);
}
reps(i, dx, 0){
ans.push_back('L');
--p.first;
pena ^= val(p);
}
}
int main(){
//cin.tie(nullptr);
//ios::sync_with_stdio(false);
cin>>A>>B;
P p = pos(A), q = pos(B);
pena = A;
move(p, q);
ll tyousei = B ^ pena;
move(q, pos(tyousei));
move(pos(tyousei), q);
assert(pena == 0);
cout<<0<<endl;
cout<<ans.size()<<endl;
cout<<ans<<endl;
}
carrot46