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
#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>1; 
        if(check(mid)) ans=r=mid;
        else l=mid+1;
    }
    cout<

T2 哈密顿回路

题目描述:长者国马上要举行一次盛大的马拉松赛跑了!全国各地的记者在首都欢聚一堂,参加这一意义重大的比赛。有一位长者在首都画了一个圈,作为比赛的赛道。同时,为了增加趣味性,这条赛道还添加了一些“捷径”。当然,这些捷径并不意味着具体来讲,赛道上一共有 n 个地点,编号为 1..n。某些地点之间可能存在相连的跑道。记者们将在 1 号地点起跑,经过每个地点一次之后回到 1 号地点。例如,在下面的赛道中:

2017.9.19 noip模拟 二分法 哈密顿回路 数学(二项式定理)_第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。并且数据保证你可以找到一组合法的
方案。
对于每个测试点限制如下:


2017.9.19 noip模拟 二分法 哈密顿回路 数学(二项式定理)_第2张图片
20170919102824_86125[1].jpg

T3 二项式定理

2017.9.19 noip模拟 二分法 哈密顿回路 数学(二项式定理)_第3张图片
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。
对于每个测试点的限制如下:

2017.9.19 noip模拟 二分法 哈密顿回路 数学(二项式定理)_第4张图片
20170919103604_40689[1].jpg

显然的二项式定理
所以很简单,

你可能感兴趣的:(2017.9.19 noip模拟 二分法 哈密顿回路 数学(二项式定理))