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 ...
随机推荐
- django_models_Meta字段详解
Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.而可用的选项大致包含以下几类 abstract 这个属性是定义当前的模型是不是一个抽象类.所谓抽象类是不会对应数据 ...
- Daily Srum 10.28
这两天我们和其他两组进行了一次会议,主要讨论的是用什么框架来搭建这个平台.在线系统的那一组希望我们用nutch.solr.hbase这一套工具,这对于我们两组来说是一次挑战,毕竟我们一开始用的是关系型 ...
- 第二阶段每日站立会议Forth Day
昨天对于程序中的字体显示进行细化修改,使界面更美观 今天准备继续调试手机界面 遇到的问题:上几次Tomcat运行正常,今天突然出现问题,Tomcat服务可以打开,但是无法连接到数据库
- spring冲刺第三天
昨天完成了环境配置和初步的地图设想. 今天从网上找了有关这方面的例子,运行试验了一番.编写的地图画面在程序上运行了一下,有些错误,还需要很多方面的改进. 这些例子有很多地方都不太懂,但还是看完了.我认 ...
- Leetcode题库——4.寻找两个有序数组的中位数
@author: ZZQ @software: PyCharm @file: findMedianSortedArrays.py @time: 2018/10/10 19:24 说明:给定两个大小为 ...
- BETA-5
前言 我们居然又冲刺了·五 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 前一份代码方案全部垮掉,我,重构啦 接下来的计划 加速加速,一定要完成速度模块 ...
- Alpha版本冲刺(九)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- 手动解析Excel获取文件元数据
工作中有遇到需要获取上传的Excel文件的列明.最大行数.大小等元数据信息.通常做法是通过Apache的POI工具加载文件然后再读取行列进行处理.这种方法很大的弊端就是需要把excel文件加载到内存, ...
- cropper.js 超级好用的裁剪图片工具
最近要做一个照片裁剪功能.就选用了cropper.js 代码如下:贴出来 <div class="container"> <div class="row ...
- Nginx负载均衡配置与负载策略
原理 负载均衡的目的是为了解决单个节点压力过大,造成Web服务响应过慢,严重的情况下导致服务瘫痪,无法正常提供服务. 应用场景 春节期间在12306网站上买过火车票的朋友应该深有体会,有时查询一张火车 ...