*[hackerrank]Volleyball Match
https://www.hackerrank.com/contests/w1/challenges/volleyball-match
此题不错,首先可以看出是DP,S(x, y)= S(x - 1, y) + S(x, y - 1)。然后比赛结束状态需要认真判断。三来,最后数据量很大(接近10^9)远超一般DP的数据量,分配数组都不行,里面是有规律的。下面是大数据失败的代码:
#include <vector>
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std; vector<vector<int> > ma;
int MOD = 1000000007; bool validEnd(int a, int b) {
// a >= b
if (a < 25)
return false;
if (a == 25) {
return ((a - b) >= 2);
}
else {
return ((a - b) == 2);
}
} bool valid(int a, int b) {
// a >= b
if (a < 0 || b < 0)
return false;
if (a <= 25 && b <= 25)
return true;
else
return ((a - b) <= 2);
} int getCount(int a, int b, bool first) {
if (!valid(a, b)) {
return 0;
}
if (!first && validEnd(a, b)) {
return 0;
}
if (ma[a][b] != -1) {
return ma[a][b];
}
ma[a][b] = (getCount(a - 1, b, false) + getCount(a, b - 1, false)) % MOD;
return ma[a][b];
} int main() {
int a, b;
cin >> a >> b;
if (a < b)
swap(a, b);
if (!validEnd(a, b)) {
cout << 0 << endl;
return 0;
}
ma.resize(a + 1);
for (int i = 0; i < ma.size(); i++) {
ma[i].resize(b + 1, -1);
}
ma[0][0] = 1;
int r = getCount(a, b, true);
cout << r << endl;
}
正确做法是观察到,大于25的比赛结束状态都是由24:24经由一个一个平局过来的,没经过一次增加一倍。这样只要改写main函数基本就行了,主要pow由于次数太高,会远超long的值域,需要改写每次都MOD一下。
int pw(int k) {
if (k == 0)
return 1;
if (k == 1)
return 2;
int q = pw(k / 2);
q = (1LL * q * q) % MOD;
if (k % 2 == 1)
return (q + q) % MOD;
else
return q;
}
int main() {
int a, b;
cin >> a >> b;
if (a < b)
swap(a, b);
if (!validEnd(a, b)) {
cout << 0 << endl;
return 0;
}
ma.resize(26);
for (int i = 0; i < ma.size(); i++) {
ma[i].resize(26, -1);
}
ma[0][0] = 1;
int r = 0;
if (a == 25) {
r = getCount(a, b, true);
}
else {
r = getCount(24, 24, true);
r = ((int64_t) r * pw(b - 24)) % MOD;
}
cout << r << endl;
}
*[hackerrank]Volleyball Match的更多相关文章
- CF95C Volleyball
题意翻译 给出一个图,双向边,边上有权值代表路的距离,然后每个点上有两个值,t,c,t代表能从这个点最远沿边走t,且不能在半路下来,花费是c 现在告诉你起点终点,问最少的花费 点个数1000,边个数1 ...
- Codeforces 96D Volleyball(最短路径)
Petya loves volleyball very much. One day he was running late for a volleyball match. Petya hasn't b ...
- Codeforces 95C Volleyball(最短路)
题目链接:http://codeforces.com/problemset/problem/95/C C. Volleyball time limit per test 2 seconds memor ...
- KDD2016,Accepted Papers
RESEARCH TRACK PAPERS - ORAL Title & Authors NetCycle: Collective Evolution Inference in Heterog ...
- Elasticsearch 5.0 中term 查询和match 查询的认识
Elasticsearch 5.0 关于term query和match query的认识 一.基本情况 前言:term query和match query牵扯的东西比较多,例如分词器.mapping ...
- SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)
前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...
- Java compiler level does not match解决方法
从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description Resource Path Location Type Java compiler level d ...
- 钉钉开放平台demo调试异常问题解决:hostname in certificate didn't match
今天研究钉钉的开放平台,结果一个demo整了半天,这帮助系统写的也很难懂.遇到两个问题: 1.首先是执行demo时报unable to find valid certification path to ...
- .net正则表达式大全(.net 的 System.Text.RegularExpressions.Regex.Match()方法使用)
正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET的System.dll类库提供的System.Text.RegularExpression ...
随机推荐
- js设计模式(3)---桥接模式
0.前言 看设计模式比较痛苦,一则是自己经验尚浅,不能体会到使用这些设计模式的益处:二则是不能很好把握使用这些设计模式的时机.所以这一部分看得断断续续,拖拖拉拉,为了了却这快心病,决定最近一口气看完几 ...
- [DevExpress]ChartControl之柱状图示例
关键代码: using System; using System.Data; using System.Windows.Forms; using CSharpUtilHelpV2; using Dev ...
- 批处理bat命令--获取当前盘符和当前目录和上级目录
批处理bat命令--获取当前盘符和当前目录和上级目录 批处理命令获取当前盘符和当前目录%~d0 是当前盘符%cd% 是当前目录可以用echo %cd%进行打印测试 以下例子是命令行编译Visual S ...
- 学习php中常用语句与函数
1.while循环多用于不清楚循环次数的情况下,如需要把从数据库中读取出的多条记录(不清楚到底有多少条)并且要根据某个字段的值进行分类,每类值的具体数目,如下图: 其中选项有三种值,对每个值的票数时行 ...
- 一个统计目录文件大小的php函数
早上刚到公司,头告诉我,抓紧写一个小函数,用来统计指定目录中文件大小,我了个去,动手吧,还好有点小基础,一会就完工了,哈哈.代码在下面咯. <? /** 统计目录文件大小的函数 @author ...
- linux下查看进程内存使用情况
1. top命令--动态查看一个进程的内存使用top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 如果想根据内存使用量进行排序,可以shift ...
- java_Thread生产者与消费者 Demo
package com.bjsxt.Thread.Demo; public class ProducerConsumer { /** * 生产者与消费者 * @param args */ public ...
- Swift学习:闭包(Closures)
/* 闭包(Closures)* 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值.* 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas类 ...
- 执行umount 命令的时候出现 device is busy
执行umount 命令的时候出现 device is busy ,有人在使用这块磁盘 umount /dev/sde1 umount: /u01/app/oracle: device is busy ...
- C++实现数字媒体三维图像变换
C++实现数字媒体三维图像变换 必备环境 glut.h 头文件 glut32.lib 对象文件库 glut32.dll 动态连接库 程序说明 C++实现了用glut画物体对象的功能.并附带放大缩小,旋 ...