题意:

长度是n的线段上点的编号从1~n,每个点有一只蚂蚁蚂蚁的体重等于该点的编号,最初每只蚂蚁可以选择向右走或者向左走两只蚂蚁相遇时体重大的吃掉体重小的并且体重增加为两只的体重和,走到边界时掉头,问第k只蚂蚁活到最后的方案数。

Limits: • 1 ≤ T ≤ 100. • 1 ≤ K ≤ N. • 2 ≤ N ≤ 106 .

Sample Input

3

2 1

3 2

4 2

Sample Output

Case #1: 0

Case #2: 4

Case #3: 4

代码:

//k==1并且n!=1时答案是0。
//对于第k只蚂蚁如果他要活到最后他一定是开始向左走(最后一只除外),把左边的蚂蚁都吃掉然后掉头向右走,在第k只
//蚂蚁左边的蚂蚁中最右边的一只向左走的蚂蚁p一定是会吃掉它左边的所有蚂蚁然后再向右走因此(p+1~k-1)的蚂蚁都是
//向右走的并且他们被k吃掉后k的总重量要大于p的总重量。p+1~k方向固定,1~p各有两个方向可以选择。
//然后考虑k右边的蚂蚁,当吃掉第i只蚂蚁时的方案数可以由第i-1只得到,假设现在左边k已经吃完第lef只蚂蚁了,假
//设第i只蚂蚁向左走那么它被吃掉的方案数就是第i-1只被吃掉的方案数但是还要考虑当lef+1~i-1的蚂蚁都向右走并且
//他们加上i的体重大于k的体重了那么这种方案就不行,这种的方案共有f[lef](f[i]表示第i只蚂蚁向左走的方案数)种
//,要减去。假设第i只蚂蚁向右走那么它被吃掉的方案数还是第i-1只被吃掉的方案数(假设i是最后一只)。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const ll MOD=1e9+;
const int MAXN=;
int t,k,n,fin[MAXN];
ll tp[MAXN],f[MAXN],ans;
int search(int x)
{
int l=,r=x,ss;
ll aa=1LL*x*(x+)/;
while(l<=r){
ll mid=(l+r)>>;
ll tmp1=mid*(mid+)/;
ll tmp2=aa-tmp1;
if(tmp2<=tmp1) { ss=mid;r=mid-; }
else l=mid+;
}
return ss;
}
void init()
{
tp[]=;
for(int i=;i<=MAXN-;i++) tp[i]=(tp[i-]*)%MOD;
fin[]=;
for(int i=;i<=MAXN-;i++) fin[i]=search(i);
}
int main()
{
init();
scanf("%d",&t);
for(int cas=;cas<=t;cas++){
scanf("%d%d",&n,&k);
if(k==&&n!=) ans=;
else{
f[k]=tp[fin[k]-];
ll tmp=f[k];
int lef=k;
for(int i=k+;i<=n;i++){
int j=fin[i];
while(lef<j){
tmp=((tmp-f[lef])%MOD+MOD)%MOD;
lef++;
}
f[i]=tmp;
tmp=(tmp*)%MOD;
}
ans=(f[n]*)%MOD;
}
printf("Case #%d: %lld\n",cas,ans);
}
return ;
}

UVALive 7505 Hungry Game of Ants (2015Ecfinal)的更多相关文章

  1. UVALive 7505 Hungry Game of Ants

    1. 笔记 比较容易的动态规划题.往左很好考虑,往右用dpi表示前i只都被k吃掉后,k继续往右仍然不死的情况数.状态转移方程为dp[I]=dp[I+1]+...+dp[j],分别对应第I+1位向左,. ...

  2. 2015 ACM/ICPC EC-Final

    A. Boxes and Balls 二分找到最大的不超过$n$的$\frac{x(x+1)}{2}$形式的数即可. #include <bits/stdc++.h> using name ...

  3. UVALive 4043 Ants

    KM   构图求最小权值匹配 保证最小的权值,所连的边一定是能够不相交的. Ants Time Limit: 3000MS   Memory Limit: Unknown   64bit IO For ...

  4. UVALive 4043 Ants 蚂蚁(二分图最佳完美匹配,KM算法)

    题意: 有n个蚂蚁n棵树,蚂蚁与树要配对,在配对成功的一对之间连一条线段,要求所有线段不能相交.按顺序输出蚂蚁所匹配的树. 思路: 这个题目真是技巧啊,不能用贪心来为每个蚂蚁选择最近的树,这样很可能是 ...

  5. UVALive 4043 Ants(二分图完美匹配)

    题意:每个蚁群有自己的食物源(苹果树),已知蚂蚁靠气味辨别行进方向,所以蚁群之间的行动轨迹不能重叠.现在给出坐标系中n个蚁群和n棵果树的坐标,两两配对,实现以上要求.输出的第 i 行表示第 i 个蚁群 ...

  6. UVaLive 4043 Ants (最佳完美匹配)

    题意:给定 n 个只蚂蚁和 n 棵树的坐标,问怎么匹配使得每个蚂蚁到树的连线不相交. 析:可以把蚂蚁和树分别看成是两类,那么就是一个完全匹配就好,但是要他们的连线不相交,那么就得考虑,最佳完美匹配是可 ...

  7. Uvalive 4043 Ants —— 二分图最大权匹配 KM算法

    题目链接:https://vjudge.net/problem/UVALive-4043 题意: 给出n个白点和n个黑点的坐标, 要求用n条不相交的线段把他们连接起来,其中每条线段恰好连接一个白点和黑 ...

  8. UVa 12709 && UVaLive 6650 Falling Ants (水题)

    题意:给定 n 个长方体的长,宽,高,让你求高最大的时候体积最大是多少. 析:排序,用高和体积排序就好. 代码如下: #pragma comment(linker, "/STACK:1024 ...

  9. 训练指南 UVALive - 4043(二分图匹配 + KM算法)

    layout: post title: 训练指南 UVALive - 4043(二分图匹配 + KM算法) author: "luowentaoaa" catalog: true ...

随机推荐

  1. 【欢迎来怼】 Beta发布事后诸葛亮会议

    队名:欢迎来怼 项目名称:博客园Android端APP 小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 ————————————————————————————————————— ...

  2. learning of a previous team

     作为一个软件工程团队,离不开下面三个要素:支持,即分享.责任和合作. 分享是出色技术团队的另一个关键要素,它是团队的基石之一.只有通过分享,团队才有可能实现1+1 > 2这种效应,分享也是让团 ...

  3. Buaaclubs的NABC与发布

    NEED: 本项目主要目的是实现一个社团学生公共平台,平台的宗旨是为学生提供信息,为社团提供服务,在社团和学生之间建立联系.经过调查,我们发现了用户的以下需求: 需求一:社团发布信息,同学获知信息 这 ...

  4. 第二阶段每日站立会议Third Day

    昨天对图片显示的大小进行调整 今天对于程序中的字体显示进行细化修改,使界面更美观 遇到的问题:当图片太小时,显示一块灰色区域,不美观

  5. Mininet-Wifi 多接入点(Access Point)实验

    实验简介  这个实验来自Mininet-Wifi用户手册.在本实验中,我们会创建一个有三个AP的线式拓扑,并有三个站点(station)与每个AP通过无线相连.将通过这个时间简单演示一些Mininet ...

  6. d指针在Qt上的应用及实现(有图,很清楚)

    Qt为了使其动态库最大程度上实现二进制兼容,引入了d指针的概念.那么为什么d指针能实现二进制兼容呢?为了回答这个问题,首先弄清楚什么是二进制兼容?所谓二进制兼容动态库,指的是一个在老版本库下运行的程序 ...

  7. CSS 报错

  8. Android UI测量、布局、绘制过程探究

    在上一篇博客<Android中Activity启动过程探究>中,已经从ActivityThread.main()开始,一路摸索到ViewRootImpl.performTraversals ...

  9. Redis (二)_ jedis的使用

    Jedis 是 Redis 官方首选的 Java 客户端开发包 虚拟机设置 查看虚拟机的ip ifconfig 将虚拟机的6379端口打开 #运行下面的命令 如果是新建的一个新的 文件,你需要先安装 ...

  10. sublimeText3的一些操作记录

    # 给绿色版的sublimeText3添加右键菜单,其中@=“Sublime Text 3” 是右键展示的文字, 后面的icon是图标将下面代码保存为.reg文件执行 Windows Registry ...