The 2015 China Collegiate Programming Contest C. The Battle of Chibi hdu 5542
The Battle of Chibi
Time Limit: 6000/4000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 591 Accepted Submission(s): 192
So there is only one way left for Yu Zhou, send someone to fake surrender Cao Cao. Gai Huang was selected for this important mission. However, Cao Cao was not easy to believe others, so Gai Huang must leak some important information to Cao Cao before surrendering.
Yu Zhou discussed with Gai Huang and worked out N information to be leaked, in happening order. Each of the information was estimated to has ai value in Cao Cao's opinion.
Actually, if you leak information with strict increasing value could accelerate making Cao Cao believe you. So Gai Huang decided to leak exact M information with strict increasing value in happening order. In other words, Gai Huang will not change the order of the N information and just select M of them. Find out how many ways Gai Huang could do this.
Each test case begins with two numbers N(1≤N≤103) and M(1≤M≤N), indicating the number of information and number of information Gai Huang will select. Then N numbers in a line, the ith number ai(1≤ai≤109) indicates the value in Cao Cao's opinion of the ith information in happening order.
The result is too large, and you need to output the result mod by 1000000007(109+7).
3 2
1 2 3
3 2
3 2 1
Case #2: 0
In the first cases, Gai Huang need to leak 2 information out of 3. He could leak any 2 information as all the information value are in increasing order.
In the second cases, Gai Huang has no choice as selecting any 2 information is not in increasing order.
#include <cstdio>
#include <iostream>
#include <map>
#include <algorithm>
using namespace std; const int N = , Mod = ;
int n, m, arr[N];
int dp[N][N], tr[N][N];
map<int, int> Hash;
int tmp[N], tot; inline int Lowbit(int x)
{
return x & (-x);
} inline void Plus(int &x, int y)
{
x = x + y;
if(x >= Mod) x -= Mod;
} inline void Add(int index, int x, int val)
{
x++;
for( ; x <= tot + ; x += Lowbit(x)) Plus(tr[index][x], val);
} inline int Query(int index, int x)
{
int ret = ;
x++;
for( ; x; x -= Lowbit(x)) Plus(ret, tr[index][x]);
return ret;
} inline void Solve()
{
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) scanf("%d", &arr[i]); Hash.clear();
for(int i = ; i <= n; i++) tmp[i] = arr[i];
sort(tmp + , tmp + + n);
tot = ;
Hash[tmp[]] = ;
for(int i = ; i <= n; i++)
if(tmp[i] != tmp[i - ])
Hash[tmp[i]] = ++tot; for(int i = ; i <= n; i++) arr[i] = Hash[arr[i]];
/*for(int i = 1; i <= n; i++)
printf(i < n ? "%d " : "%d\n", arr[i]);*/ for(int i = ; i <= m; i++)
for(int j = ; j <= tot + ; j++) tr[i][j] = ;
for(int i = ; i <= m; i++) dp[][n] = ;
dp[][] = ;
Add(, , );
for(int i = ; i <= n; i++)
{
for(int j = ; j <= m; j++)
{
dp[i][j] = ;
int cnt = Query(j - , arr[i] - );
Plus(dp[i][j], cnt);
Add(j, arr[i], dp[i][j]);
}
} int ans = ;
for(int i = ; i <= n; i++) Plus(ans, dp[i][m]);
printf("%d\n", ans);
} int main()
{
int test;
scanf("%d", &test);
for(int testnumber = ; testnumber <= test; testnumber++)
{
printf("Case #%d: ", testnumber);
Solve();
}
return ;
}
The 2015 China Collegiate Programming Contest C. The Battle of Chibi hdu 5542的更多相关文章
- The 2015 China Collegiate Programming Contest A. Secrete Master Plan hdu5540
Secrete Master Plan Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Othe ...
- The 2015 China Collegiate Programming Contest Game Rooms
Game Rooms Time Limit: 4000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- The 2015 China Collegiate Programming Contest L. Huatuo's Medicine hdu 5551
Huatuo's Medicine Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- The 2015 China Collegiate Programming Contest K Game Rooms hdu 5550
Game Rooms Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- The 2015 China Collegiate Programming Contest H. Sudoku hdu 5547
Sudoku Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Subm ...
- The 2015 China Collegiate Programming Contest G. Ancient Go hdu 5546
Ancient Go Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- The 2015 China Collegiate Programming Contest E. Ba Gua Zhen hdu 5544
Ba Gua Zhen Time Limit: 6000/4000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- The 2015 China Collegiate Programming Contest D.Pick The Sticks hdu 5543
Pick The Sticks Time Limit: 15000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- The 2015 China Collegiate Programming Contest -ccpc-c题-The Battle of Chibi(hdu5542)(树状数组,离散化)
当时比赛时超时了,那时没学过树状数组,也不知道啥叫离散化(貌似好像现在也不懂).百度百科--离散化,把无限空间中无限的个体映射到有限的空间中去,以此提高算法的时空效率. 这道题是dp题,离散化和树状数 ...
随机推荐
- Mysql之取消主从复制
Mysql5.7 Mysql取消主从复制很简单.只需在其要终止同步的Server上[一般是Slave]执行下面语句即可: stop slave; reset slave; 如图: .
- JS返回上一页
<button onclick="javascript:history.go(-1);">返回上一页</button> <button oncli ...
- 字符识别(模板匹配&BP神经网络训练)
http://blog.csdn.net/zhang11wu4/article/details/7585632
- linux清除当前屏幕
linux清除当前屏幕:直接clear命令即可 而在windows下的话用cls命令
- 微信token验证失败的解决方法
一.问题由来 在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种情况 1. token校验失败 这样回头检查一下各项配置是否正确.如果确定配置没有问题,请按下面的方法检 ...
- Delphi字符串的基本操作与常用函数
参考:http://www.cnblogs.com/pchmonster/archive/2011/12/16/2290034.html 结合这个博客一起学习:http://www.cnblogs.c ...
- 无废话ExtJs 入门教程十六[页面布局:Layout]
无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distributi ...
- bee使用
beego虽然是一个简单的框架,但是其中用到了很多第三方的包,所以在你安装beego的过程中Go会自动安装其他关联的包. 当然第一步你需要安装Go,如何安装Go请参考我的书 安装beego go ge ...
- HP SAN Switch參考文檔地址
HP SAN Switch其實也是基於Linux內核 http://h20566.www2.hpe.com/portal/site/hpsc/template.PAGE/public/psi/manu ...
- Socket编程注意接收缓冲区大小
转自:http://www.cnblogs.com/ITBread/p/3900254.html 最近在做一个udp升级程序,因文件有点大,需要将程序分成多个包发送,每次发送一个包,收到回复后发送下一 ...