好難啊…
策 略很
明顯,枚
舉t,計
算此時的
s策略很明顯,列舉t,計算此時的s
策略很明顯,
列舉t,
計算此時
的s為了方便,令兩個人分別叫做a和b
暴 力計
算需要o
(n2)
,考慮如
何加
速暴力計算需要o(n^2),考慮如何加速
暴力計算需要
o(n2
),考慮
如何加速
回想一下,我們在暴力的過程中有什麼可以優化的
現在已知贏一局需要t
tt分,所以第一局分出勝負的位置
要麼在a贏t
tt局的位置,要麼在b贏t
tt局的位置
這兩個位置誰比較小就是誰贏,設這個位置在now
nowno
w 那 麼把
a和b都
提到no
w這個位
置那麼把a和b都提到now這個位置
那麼把a和b
都提到n
ow這個
位置 我們可
以很容易
得出在n
ow這個
位置a贏
了x局,
b贏了y
局我們可以很容易得出在now這個位置a贏了x局,b贏了y局
我們可以很容
易得出在
now這
個位置a
贏了x局
,b贏了
y局 類似的
,可以知
道下一次
分出勝負
的位置是
a贏x+
t局,b
贏y+t
局位置的
較小
值類似的,可以知道下一次分出勝負的位置是a贏x+t局,b贏y+t局位置的較小值
類似的,可以
知道下一
次分出勝
負的位置
是a贏x
+t局,
b贏y+
t局位置
的較小值
所以預處理a和b贏k局的位置
預處理a和b在第k個回合贏了多少局
就可以一直跳跳跳檢查,思維難度不小,實現難度更大
#include using namespace std;
const int maxn=2e5+10;
int f[maxn],g[maxn],n,top1,top2;
int a[maxn],b[maxn];
vector>ans;
int main()
for(int t=1;t<=n;t++)
int x=f[cur1+t],y=g[cur2+t];
if( xy&&s1>s2 ) flag=0;//x贏最後一盤但是反而贏了
if( s1==s2 ) flag=0;//平局
break;
}cur=now;
} if( flag ) ans.push_back( make_pair(max(s1,s2),t) );
} sort( ans.begin(),ans.end() );
cout << ans.size() << endl;
for(int i=0;iprintf("%d %d\n",ans[i].first,ans[i].second);
}
F Candle Box 模擬 思維
題目鏈結 題意 姐姐從4歲開始向盒子裡放與年數相等的蠟燭,弟弟從3歲開始,兩人各有乙個盒子,但是最近一些年弟弟把自己的蠟燭誤放在姐姐的盒子裡。現給出姐姐和弟弟的年齡差,以及現在姐姐盒子裡和弟弟盒子裡的蠟燭數量,求姐姐應該從自己的盒子裡面拿出多少蠟燭才能得到當前應有的蠟燭。思路 等差數列求和公式,然後...
Helping the HR 思維模擬題
這道題我一看,那麼長 結果就是乙個模擬題 這道題如果都把他化成秒就很好算了,因為題目有規定輸入的時間不會發生衝突 所以我直接比較秒的大小就行了 主要是題意的理解 1.如果在白班換崗,那麼就是必須在9 30之前到崗,否則就遲到了 並且在到崗後必須值班至少8個小時 2.如果在晚班換崗,那麼就必須在12 ...
今夕何年 模擬 思維題
今天是2017年8月6日,農曆閏六月十五。小度獨自憑欄,望著一輪圓月,發出了 今夕何夕,見此良人 的寂寞感慨。小貼士 在公曆中,能被4整除但不能被100整除,或能被400整除的年份即為閏年。input 第一行為t,表示輸入資料組數。每組資料報含乙個日期,格式為yyyy mm dd。1 t 10000...