Submission #6667380
Source Code Expand
#include <bits/stdc++.h> #define rep(i, a, b) for (ll i = (a); i < (b); i++) typedef uint64_t ull; typedef int64_t ll; typedef std::pair<ll, ll> PLL; using namespace std; // 事前に、X>=0,Y>=0 にしておく // 1. X+Yが奇数 かつ Kが偶数 // -1, どうやっても奇数番地にはたどり着けない // 2. X+Y>K // n=ceil(X+Y/K)として、X+Y と nK の偶奇が異れば n++ // 余剰 nK-X-Y のために、冗長な経路を作る。 // // t = (nK-X-Y)/2 // // + // | // | Y // + | // t | | t // |-----| // X // // 3. X+Y<K // 3-1. X+Yが偶数, n=2となる // t = (2K-X-Y)/2 // // + // | // | Y // + | // t | | t // |-----| // X // // 3-1. X+Yが奇数(1より、Kも奇数) // n=3になる // これが難しい // // 2(t+p) = 3K-(X+Y), t=K-X, p=(K+X-Y)/2 // pとtが正、かつ p,t < K となるように // p // +----+ // | // | Y // + | // t | | t // |----------| // X p // 4. X+Y==Kは自明 ll K,X,Y; ll sign_x = 1, sign_y = 1; bool swp = false; void print(vector<PLL> ans) { cout<<ans.size()<<endl; rep(i,0,ans.size()){ if (swp) swap(ans[i].first, ans[i].second); ans[i].first *= sign_x; ans[i].second *= sign_y; } if (swp) swap(X,Y); if (sign_x) X*=sign_x; if (sign_y) Y*=sign_y; rep(i,0,ans.size()) cout<<ans[i].first<< " " << ans[i].second<<endl; assert(ans[ans.size()-1].first == X); assert(ans[ans.size()-1].second == Y); rep(i,0,ans.size()) if (i > 0) assert(abs(ans[i].first-ans[i-1].first) + abs(ans[i].second-ans[i-1].second) == K); } signed main() { cin>>K>>X>>Y; if (X<0) { X*=-1; sign_x = -1;} if (Y<0) { Y*=-1; sign_y = -1;} if (X<Y){ swap(X,Y); swp=true; } if ((X+Y)%2==1 && K%2==0) { cout<<-1<<endl; return 0; } if (X+Y == K) { vector<PLL> ans; ans.push_back(PLL(X,Y)); print(ans); return 0; } if (X+Y < K && (X+Y)%2 == 1) { ll p=(K+X-Y)/2; vector<PLL> ans; ans.push_back(PLL(X, -(K-X))); ans.push_back(PLL(X+p, Y-(K-p))); ans.push_back(PLL(X, Y)); print(ans); return 0; } // 移動回数の決定 ll n; if (X+Y < K && (X+Y)%2 == 0) { n = 2; } else { //ll c = (K -(X+Y % K)) %K; //if (c%2==0) { // n = (X+Y +K-1) / K; //} else { // n = (X+Y +K-1) / K + 1; //} n = (X+Y +K-1) / K; if ( (n*K)%2 != (X+Y)%2 ) n++; } ll t = (n*K-X-Y)/2; vector<PLL> ans; for (ll i=0; i<n; i++){ ll d = (i+1)*K; if (d<=t) { ans.push_back(PLL(0, -d)); } else if (d<=X+t) { ans.push_back(PLL(d-t, -t)); } else { ans.push_back(PLL(X, -t+(d-X-t))); } } print(ans); return 0; }
Submission Info
Submission Time | |
---|---|
Task | E - Golf |
User | bobuhiro11 |
Language | C++14 (GCC 5.4.1) |
Score | 500 |
Code Size | 3121 Byte |
Status | AC |
Exec Time | 325 ms |
Memory | 9452 KiB |
Judge Result
Set Name | Sample | Subtask1 | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 500 / 500 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample_01.txt, sample_02.txt, sample_03.txt |
Subtask1 | sample_01.txt, sample_02.txt, sample_03.txt, sub1_01.txt, sub1_02.txt, sub1_03.txt, sub1_04.txt, sub1_05.txt, sub1_06.txt, sub1_07.txt, sub1_08.txt, sub1_09.txt, sub1_10.txt, sub1_11.txt, sub1_12.txt, sub1_13.txt, sub1_14.txt, sub1_15.txt, sub1_16.txt, sub1_17.txt, sub1_18.txt, sub1_19.txt, sub1_20.txt, sub1_21.txt, sub1_22.txt, sub1_23.txt, sub1_24.txt, sub1_25.txt, sub1_26.txt, sub1_27.txt, sub1_28.txt, sub1_29.txt, sub1_30.txt, sub1_31.txt, sub1_32.txt, sub1_33.txt, sub1_34.txt, sub1_35.txt, sub1_36.txt, sub1_37.txt, sub1_38.txt, sub1_39.txt, sub1_40.txt, sub1_41.txt, sub1_42.txt, sub1_43.txt, sub1_44.txt, sub1_45.txt, sub1_46.txt, sub1_47.txt, sub1_48.txt, sub1_49.txt, sub1_50.txt, sub1_51.txt, sub1_52.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_01.txt | AC | 1 ms | 256 KiB |
sample_02.txt | AC | 1 ms | 256 KiB |
sample_03.txt | AC | 1 ms | 256 KiB |
sub1_01.txt | AC | 1 ms | 256 KiB |
sub1_02.txt | AC | 1 ms | 256 KiB |
sub1_03.txt | AC | 1 ms | 256 KiB |
sub1_04.txt | AC | 1 ms | 256 KiB |
sub1_05.txt | AC | 1 ms | 256 KiB |
sub1_06.txt | AC | 1 ms | 256 KiB |
sub1_07.txt | AC | 1 ms | 256 KiB |
sub1_08.txt | AC | 1 ms | 256 KiB |
sub1_09.txt | AC | 1 ms | 256 KiB |
sub1_10.txt | AC | 1 ms | 256 KiB |
sub1_11.txt | AC | 1 ms | 256 KiB |
sub1_12.txt | AC | 1 ms | 256 KiB |
sub1_13.txt | AC | 1 ms | 256 KiB |
sub1_14.txt | AC | 1 ms | 256 KiB |
sub1_15.txt | AC | 1 ms | 256 KiB |
sub1_16.txt | AC | 4 ms | 384 KiB |
sub1_17.txt | AC | 1 ms | 256 KiB |
sub1_18.txt | AC | 1 ms | 256 KiB |
sub1_19.txt | AC | 1 ms | 256 KiB |
sub1_20.txt | AC | 15 ms | 764 KiB |
sub1_21.txt | AC | 1 ms | 256 KiB |
sub1_22.txt | AC | 1 ms | 256 KiB |
sub1_23.txt | AC | 1 ms | 256 KiB |
sub1_24.txt | AC | 4 ms | 256 KiB |
sub1_25.txt | AC | 1 ms | 256 KiB |
sub1_26.txt | AC | 1 ms | 256 KiB |
sub1_27.txt | AC | 1 ms | 256 KiB |
sub1_28.txt | AC | 7 ms | 384 KiB |
sub1_29.txt | AC | 1 ms | 256 KiB |
sub1_30.txt | AC | 1 ms | 256 KiB |
sub1_31.txt | AC | 1 ms | 256 KiB |
sub1_32.txt | AC | 1 ms | 256 KiB |
sub1_33.txt | AC | 7 ms | 384 KiB |
sub1_34.txt | AC | 325 ms | 9452 KiB |
sub1_35.txt | AC | 1 ms | 256 KiB |
sub1_36.txt | AC | 1 ms | 256 KiB |
sub1_37.txt | AC | 1 ms | 256 KiB |
sub1_38.txt | AC | 1 ms | 256 KiB |
sub1_39.txt | AC | 6 ms | 384 KiB |
sub1_40.txt | AC | 1 ms | 256 KiB |
sub1_41.txt | AC | 1 ms | 256 KiB |
sub1_42.txt | AC | 1 ms | 256 KiB |
sub1_43.txt | AC | 1 ms | 256 KiB |
sub1_44.txt | AC | 1 ms | 256 KiB |
sub1_45.txt | AC | 1 ms | 256 KiB |
sub1_46.txt | AC | 3 ms | 256 KiB |
sub1_47.txt | AC | 110 ms | 3184 KiB |
sub1_48.txt | AC | 1 ms | 256 KiB |
sub1_49.txt | AC | 1 ms | 256 KiB |
sub1_50.txt | AC | 1 ms | 256 KiB |
sub1_51.txt | AC | 112 ms | 3184 KiB |
sub1_52.txt | AC | 1 ms | 256 KiB |