日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeForces - 1036B Diagonal Walking v.2(思维)

發(fā)布時(shí)間:2024/4/11 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 1036B Diagonal Walking v.2(思维) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:點(diǎn)擊查看

題目大意:給出m個(gè)詢問,每個(gè)詢問給出x y k,每次可以向當(dāng)前點(diǎn)周圍的八個(gè)方向移動(dòng),每個(gè)點(diǎn)可以經(jīng)過任意次數(shù),問從(0,0)點(diǎn)走到(x,y)點(diǎn),使用的步數(shù)恰好為k時(shí),走過的斜邊的最大數(shù)目

題目分析:找規(guī)律的題,首先選出m和n中較大的那條邊(這里我們假設(shè)m>=n),我們完全可以每次都斜著走,走m次后,一定能到(m,m)點(diǎn),由于從(0,0)的距離到(m,m)的距離肯定大于等于到(n,m)的距離,所以我們可以反過來想,如果k小于m的話,那么最遠(yuǎn)也只能到達(dá)(k,k)點(diǎn),所以無法達(dá)到(n,m)點(diǎn),這個(gè)是一種判斷,另一種是,如果m和n做差,結(jié)果是偶數(shù)的話,一定可以全部通過走斜邊的方式經(jīng)過(n,m)點(diǎn),注意這里是經(jīng)過而不是到達(dá),具體的下面再說。我們接著分析,那如果是奇數(shù)的話,肯定需要用一次步數(shù)來橫著走一次或豎著走一次才行,所以如果m和n做差的結(jié)果是奇數(shù)的話,我們令k-1。如果是偶數(shù)的話,我們還需要討論k和m的關(guān)系,如果k和m的差值是偶數(shù)的話,那每當(dāng)走到(n,m)點(diǎn)后,可以找一個(gè)鄰近的斜邊進(jìn)行反復(fù)的來回走動(dòng),因?yàn)槭桥紨?shù),所以最后走完k次后肯定會(huì)回到(n,m)點(diǎn),所以答案就是k,但如果k和m的差值是奇數(shù),那就說明先走到(n,m)點(diǎn)后來回反復(fù)走動(dòng),走完k次后,會(huì)回不到(n,m)點(diǎn),那么我們就需要橫著或豎著多走兩次才行,這樣就可以和最后的那一次斜著走抵消了,如果滿足這個(gè)條件令k-2即可,分類討論一下每種情況,最后輸出k即可

上代碼:

#include<iostream> #include<string> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<cstdio> using namespace std; typedef long long LL;const int N=25;int main() {int w;cin>>w;while(w--){LL n,m,k;scanf("%lld%lld%lld",&n,&m,&k);if(m<n)swap(n,m);if(m>k){printf("-1\n");continue;}if((m-n)&1)//兩邊相差為奇數(shù)時(shí),需要多走一個(gè)橫著或豎著 k--;else if((k-m)&1)//兩邊相差為偶數(shù)時(shí),如果剩余步數(shù)為奇數(shù),需要多走兩個(gè)橫著或豎著k-=2;printf("%lld\n",k);//兩邊相差為偶數(shù),且剩余步數(shù)為偶數(shù)時(shí),k次全部用來斜著走即可}return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的CodeForces - 1036B Diagonal Walking v.2(思维)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。