Codeforces 1036B Diagonal Walking v.2 【貪心】
阿新 • • 發佈:2018-09-20
swap def syn ret ring n) cin ORC wap
題目傳送門:https://codeforces.com/contest/1036/problem/B
被這道題坑了,說白了還是菜。
貪心策略是先斜對角從(0,0)走到(n,n),然後往右拐(分奇偶考慮)【若n>m,swap(n,m)】
理論上是畫畫圖,知道切入點是奇偶性後,就能想清楚了
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<map> #include<vector> #defineINF 2e9 using namespace std; int main(){ ios::sync_with_stdio(false); int q; cin>>q; while(q--){ long long n,m,k; cin>>n>>m>>k; //from (0,0) to (n,m) if(n>m) swap(m,n); // get n<=m //from (0,0) to (n,n) longlong cnt=n; if( (m-n)%2==1 ){//from (n,n) to (n,m-1) cnt+=m-n-1; k-=cnt; if(k<=0){ cout<<-1<<endl; } else{ k-=1; cnt+=k; cout<<cnt<<endl; } } else{//from (n,n) to (n,m) cnt+=m-n; k-=cnt; if( k<0 ) cout<<-1<<endl; else if( k==0 ) cout<<cnt<<endl; else{ long long zero=0; if(k%2==0) cout<<cnt+k<<endl; else{ if(k==1) cout<<cnt-1<<endl; else cout<<cnt+k-2<<endl; } } } } return 0; }
Codeforces 1036B Diagonal Walking v.2 【貪心】