2017.9.19 noip模擬 二分法 哈密頓回路 數學(二項式定理)

T1 簡單的二分法

有一個果園,有 n 棵果樹依次排成一排,其中已知第 i 棵果樹上結了 a 個果子。現在要按照果樹編號順序依次收果
子,對于一個能裝 v 個果樹的果籃,收果子從第 1 棵果樹開始,如果果籃的剩余容積大于等于當前果樹所結的果子,那么就可以將此樹上的果子全收下來,否則就要拿一個新的籃子來裝果子。特別地,如果果籃容積小于某果樹的結果數,那么我們認為這樣將永遠不能收完果子。
現在假若只能用 k 個果籃,問按照以上方法能使用不超過 k 個果籃并收完所有果子的果籃最小容積。
輸入格式:
從文件 fruit.in 輸入數據。
輸入有兩行,第一行兩個正整數,代表 n、k,意義如題。
第二行 n 個正整數ai ,代表每棵果樹的結果數。
輸出格式:
輸出到文件 fruit.out 中。

輸出僅一行,一個正整數,即滿足條件的果籃最小容積。
樣例 1:
輸入
9 3
1 2 3 4 5 6 7 8 9
輸出
17
限制與約定:
對于 30% 的數據,滿足 n, k ? 100、ai? 100。
對于 60% 的數據,滿足 n, k ? 1000、ai? 105。
對于 80% 的數據,滿足 n, k ? 10000、ai ? 105。
對于 100% 的數據,滿足 n, k ? 105、ai ? 109。

一個顯然的二分法,大佬們肯定都會

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
ll n,k,l=1,r,ans,s;
ll a[N]; 
inline ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
bool check(ll v)
{
    ll sum=0,now=0;
    for(ll i=1;i<=n;i++)
    {
        if(now+a[i]<=v) now+=a[i];
        else if(a[i]>v||sum==k-1) return 0;
        else sum++,now=a[i];
    } 
    return 1;
} 
int main()
{
    freopen("in.txt","r",stdin);
    n=read();k=read();
    for(ll i=1;i<=n;i++) a[i]=read(),s+=a[i];
    r=s;
    while(l<r)
    {
        ll mid=(l+r)>>1; 
        if(check(mid)) ans=r=mid;
        else l=mid+1;
    }
    cout<<ans<<endl; 
}

T2 哈密頓回路

題目描述:長者國馬上要舉行一次盛大的馬拉松賽跑了!全國各地的記者在首都歡聚一堂,參加這一意義重大的比賽。有一位長者在首都畫了一個圈,作為比賽的賽道。同時,為了增加趣味性,這條賽道還添加了一些“捷徑”。當然,這些捷徑并不意味著具體來講,賽道上一共有 n 個地點,編號為 1..n。某些地點之間可能存在相連的跑道。記者們將在 1 號地點起跑,經過每個地點一次之后回到 1 號地點。例如,在下面的賽道中:

20170919102351_82882[1].jpg

路徑 1 ? 2 ? 3 ? 4 ? 1 是允許的,而 1 ? 2 ? 4 ? 1 和 1 ? 2 ? 3 ? 4 ? 2 ? 1 是不允許的。
作為來自全世界記者跑的最快的地區的你,早已經打聽到賽道的具體情況。于是你想知道這一次賽跑你最少要花多少時間。
輸入格式:
從文件 run.in 輸入數據。
第一行輸入兩個正整數 n 和 m,表示地點的數量和跑道的數量。
接下來 m 行,每行三個正整數 u、v 和 t,表示 u 號地點和 v 號地點之間的一條跑道,并且通過這條跑道你需要花費 t分鐘。我們認為經過每個地點是不需要花費時間的。

輸出格式:
輸出到文件 run.out 中。
輸出一行一個整數,表示最少需要多少分鐘,你才可以完成賽跑。
樣例 1
輸入
4 5
1 2 1
2 3 1
3 4 1
4 1 1
2 4 1
輸出
4
樣例2:

輸入
15 19
4 11 3
2 3 3
3 12 5
12 15 1
3 4 9
4 15 8
2 6 4
6 14 8
9 13 7
2 13 8
1 10 1
7 10 6
6 8 10
5 7 9
8 11 3
12 14 10
1 15 2
3 9 7
5 14 8
輸出
91
限制與約定
對于 100% 的數據,滿足 n ? 105,n ? m ? n + 20,1 ? u, v ? n,1 ? t ? 100。并且數據保證你可以找到一組合法的
方案。
對于每個測試點限制如下:


20170919102824_86125[1].jpg

T3 二項式定理

20170919103319_29274[1].jpg

輸入格式
從文件 problem.in 輸入數據。
輸入一共一行三個正整數 n、s 和 d,這些參數的意義均在上文給出。
輸出格式
輸出到文件 problem.out 中。
輸出共一行一個整型,表示答案對 998244353 取模后的值。
樣例 1
輸入
9999999 1 0
輸出
951935696
解釋
機智的鷗蛤菌發現這個數字就是 29999999mod 998244353。
樣例 2
輸入
9999999 1000000000000000000 899999999999777777
輸出
348456814
限制與約定
對于 100% 的數據,滿足 n, s, d ? 1018。
對于每個測試點的限制如下:

20170919103604_40689[1].jpg

顯然的二項式定理
所以很簡單,

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 生活大爆炸版石頭剪刀布 題目描述 石頭剪刀布是常見的猜拳游戲:石頭勝剪刀,剪刀勝布,布勝石頭。如果兩個人出拳一樣,...
    bbqub閱讀 487評論 0 0
  • 樹形動態規劃,顧名思義就是樹+DP,先分別回顧一下基本內容吧:動態規劃:問題可以分解成若干相互聯系的階段,在每一個...
    Mr_chong閱讀 1,522評論 0 2
  • Vigenère 密碼 題目描述 16 世紀法國外交家 Blaise de Vigenère 設計了一種多表密碼加...
    bbqub閱讀 730評論 0 0
  • 就人一生漫長過程,值得花更多時間在前期做更多深入研究,可以更加從容的選擇與準備。 推薦“才儲”公眾號,做專業以及職...
    咸叔說閱讀 271評論 0 3
  • 劉關張桃園結義 淑女呀君子好逑 華本是詩書讀遍 好女子勝過兒男 2017.中秋.宋剛 贈書華
    宋剛易海游龍閱讀 194評論 0 0