UVALive 7505 Hungry Game of Ants (2015Ecfinal)
题意:
长度是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)的更多相关文章
- UVALive 7505 Hungry Game of Ants
1. 笔记 比较容易的动态规划题.往左很好考虑,往右用dpi表示前i只都被k吃掉后,k继续往右仍然不死的情况数.状态转移方程为dp[I]=dp[I+1]+...+dp[j],分别对应第I+1位向左,. ...
- 2015 ACM/ICPC EC-Final
A. Boxes and Balls 二分找到最大的不超过$n$的$\frac{x(x+1)}{2}$形式的数即可. #include <bits/stdc++.h> using name ...
- UVALive 4043 Ants
KM 构图求最小权值匹配 保证最小的权值,所连的边一定是能够不相交的. Ants Time Limit: 3000MS Memory Limit: Unknown 64bit IO For ...
- UVALive 4043 Ants 蚂蚁(二分图最佳完美匹配,KM算法)
题意: 有n个蚂蚁n棵树,蚂蚁与树要配对,在配对成功的一对之间连一条线段,要求所有线段不能相交.按顺序输出蚂蚁所匹配的树. 思路: 这个题目真是技巧啊,不能用贪心来为每个蚂蚁选择最近的树,这样很可能是 ...
- UVALive 4043 Ants(二分图完美匹配)
题意:每个蚁群有自己的食物源(苹果树),已知蚂蚁靠气味辨别行进方向,所以蚁群之间的行动轨迹不能重叠.现在给出坐标系中n个蚁群和n棵果树的坐标,两两配对,实现以上要求.输出的第 i 行表示第 i 个蚁群 ...
- UVaLive 4043 Ants (最佳完美匹配)
题意:给定 n 个只蚂蚁和 n 棵树的坐标,问怎么匹配使得每个蚂蚁到树的连线不相交. 析:可以把蚂蚁和树分别看成是两类,那么就是一个完全匹配就好,但是要他们的连线不相交,那么就得考虑,最佳完美匹配是可 ...
- Uvalive 4043 Ants —— 二分图最大权匹配 KM算法
题目链接:https://vjudge.net/problem/UVALive-4043 题意: 给出n个白点和n个黑点的坐标, 要求用n条不相交的线段把他们连接起来,其中每条线段恰好连接一个白点和黑 ...
- UVa 12709 && UVaLive 6650 Falling Ants (水题)
题意:给定 n 个长方体的长,宽,高,让你求高最大的时候体积最大是多少. 析:排序,用高和体积排序就好. 代码如下: #pragma comment(linker, "/STACK:1024 ...
- 训练指南 UVALive - 4043(二分图匹配 + KM算法)
layout: post title: 训练指南 UVALive - 4043(二分图匹配 + KM算法) author: "luowentaoaa" catalog: true ...
随机推荐
- zabbix第一篇:zabbix安装及使用
常用软件安装及使用目录 一:搭建zabbix命令集 cat /etc/redhat-release uname -r getenforce systemctl status firewalld.ser ...
- hive对于lzo文件处理异常Caused by: java.io.IOException: Compressed length 842086665 exceeds max block size 67108864 (probably corrupt file)
hive查询lzo数据格式文件的表时,抛 Caused by: java.io.IOException: Compressed length 842086665 exceeds max block s ...
- 20180711-统计PDB中的蛋白质种类、膜蛋白文件个数及信息等
20180710完成这份工作.简单,但是完成了还是很开心.在我尝试如何使用pickle保存数据后,尝试保存PDB文件中“HEADER”中的信息.文件均保存于实验室服务器(97.73.198.168)/ ...
- 5233杨光--Linux第二次实验
实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的“实验截图”保存并分享实 ...
- 20135234mqy-——信息安全系统设计基础第三周学习总结
(1)计算机将信息按位编码,通常组成字节序列.用不同的编码方式表示整数,师叔和字符串.不同的计算机模型在编码数字和多字节数据中的字节排序时使用不同的约定. (2)C语言的设计可以包容多种不同字长和数字 ...
- NABCD(网上投票系统)
网上投票系统 N(need) 投票这件事情,在所有事情上都可能用得到,在互联网的影响下,投票的范围变得越来越广,比如在商业的里,往往要做市场分析,那么在互联网这个大的前提下,用网上投票系统来获取用户的 ...
- 09_Java面向对象_第9天(类、封装)_讲义
今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 A: 面向过程与面向对 ...
- 优先队列的一种实现--堆ADT
二叉堆的两个重要性质: 1.结构性,为完全二叉树,可以用数组方便地表示.2.堆序性:树中每个节点的关键字值大于或等于其父节点的关键字值. 二叉堆的数据结构声明如下: struct HeapStruct ...
- linux安全配置学习
参考摘自https://www.cnblogs.com/hiccup/p/4300963.html 1.关闭icmp请求 #vm虚拟机是130地址,通过echo 1 > /proc/sys/ne ...
- 10th 知识点学习:单元测试
1.书中所在位置:构建之法第二章,19页—28页. 2.大致内容:书中是以案例的形式引入的介绍,具体讲述什么是单元测试,即程序员小飞进行练习单元测试,经过一系列的代码更改之后,终于成功实现.通过事后小 ...