题目1 : 序列

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

给定两个正整数 n, P,求满足以下两个条件的长度为 n 的序列 ai 个数:

1. 1 ≤ ai ≤ P

2. 不存在 1 ≤ l ≤ r ≤ n,满足al + al+1 + ... + ar 是 P 的倍数

由于方案数可能很大,你只需要输出方案数对 109+7 取模的值

输入

第一行两个正整数 n,P

1 ≤ n, P ≤ 104

输出

输出方案数对  109+7 取模的值

样例解释

满足条件的序列有两个:{1,1} 和 {2,2}

样例输入

2 3

样例输出

2
 #include <iostream>
#define ll long long using namespace std; const ll MOD = ; int main()
{
ll n, p;
while(cin>>n>>p){
ll ans = ;
p--;
while(n--){
ans *= p;
ans %= MOD;
p--;
}
cout<<ans<<endl;
} return ;
}

题目2 : 彩球

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

有一家商店,一共有 n × k 个彩球。球一共有 n 种颜色,每种颜色的球都是有恰好 k 个,现在你要从这 n×k 个球中选 n 个球,要求他们的颜色互不相同,求有几种选择的方案,由于方案数可能很大,你只需要输出方案数对 P 取模后的值。

输入

第一行三个正整数 n, k, P

对于50%的数据,有1 ≤ n, k, P ≤ 109

对于100%的数据,有1 ≤ n, k, P ≤ 1018

输出

输出方案数对 P 取模后的值

样例输入
2 2 100000
样例输出
4
 def quick_pow(a, n, mod):
ans = 1
while(n!=0):
if(n%2==1):
ans = ans*a%mod
a = a*a%mod
n = n // 2
return ans if __name__ == '__main__':
n, k, mod = raw_input().strip().split()
n = long(n)
k = long(k)
mod = long(mod)
print quick_pow(k, n, mod)

题目3 : 最优子段

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个长度为 n 的序列 ai 和两个整数 A, B,要求你找一对数l, r,要求1 ≤ l ≤ r 且A×(ai+ai+1+...+ar)+B 最大

输入

第一行三个整数 n, A, B

第二行 n 个整数,第 i 个整数表示 ai

1 ≤ n ≤ 106

-106 ≤ A, B, ai ≤ 106

输出

输出最大的A×(ai+ai+1+...+ar)+B

样例解释

选择 (1,1) 或者 (4,4) 都可以

样例输入
4 2 3
0 -2 -2 0
样例输出
3
 #include <iostream>
#define ll long long using namespace std; const int N = ; ll arr[N]; ll dp(ll n){
ll ans = ;
ll sum = ;
for(int i = ; i <n; i++){
sum += arr[i];
ans = max(ans, sum);
if(sum < )sum = ;
}
return ans;
} int main()
{
ll n, A, B;
while(cin>>n>>A>>B){
for(int i = ; i < n; i++){
cin>>arr[i];
if(A<)arr[i] *= -;
}
if(A<)cout<<-A*dp(n)+B<<endl;
else cout<<A*dp(n)+B<<endl;
} return ;
}

题目4 : 公路收费

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

A 国有 n 个城市,第 i 个城市有 ai 个会议代表,这 n 个城市通过 n-$ 条双向的高速公路连接,保证每两个城市都可以通过高速公路互相到达,每个人通过一条高速公路都要付相应的费用。

现在 A 国的总统想挑选一个城市作为会议中心,要求全国所有会议代表都到这个城市来,为了方便大家出行,A 国的总统可以让不超过 k 条高速公路的收费变为 0 。

现在你要安排挑选的城市和免费的高速公路,最小化的所有会议代表的路费总和。

输入

第一行两个整数 n, k

第二行 n 个非负整数,第 i 个表示ai

接下来 n-1 行,每行三个整数 u, v, w,描述一条收费为 w 的高速公路 (u, v)

1 ≤ n ≤ 103

0 ≤ k ≤ n-1

1 ≤ w, ai≤ 105

输出

输出最小的路费总和

样例解释

让 (2,3) 免费,然后选 2 作为会议城市

样例输入
3 1
1 2 3
1 2 1
2 3 2
样例输出
1
 #include <iostream>
#include <vector>
#include <cstring>
#include <algorithm> #define ll long long using namespace std; const int N = ;
const ll INF = 0x3f3f3f3f3f3f3f3f; ll arr[N], sum[N]; struct Edge{
int to, w, next;
}edges[*N];
int head[N], tot; void init(){
memset(head, -, sizeof(head));
tot = ;
} void add_edge(int u, int v, int w){
edges[tot].to = v;
edges[tot].w = w;
edges[tot].next = head[u];
head[u] = tot++;
} vector<ll> vec;
int n, k; void dfs(int u, int fa){
sum[u] = arr[u];
for(int i = head[u]; i != -; i = edges[i].next){
int v = edges[i].to;
int w = edges[i].w;
if(v != fa){
dfs(v, u);
sum[u] += sum[v];
vec.push_back(sum[v]*w);
}
}
} ll work(int s){
vec.clear(); dfs(s, );
sort(vec.begin(), vec.end());
ll ans = ;
for(int i = ; i < n-k-; i++)
ans += vec[i];
return ans;
} int main()
{
while(cin>>n>>k){
for(int i = ; i <= n; i++)
cin>>arr[i];
int u, v, w;
init();
for(int i = ; i < n-; i++){
cin>>u>>v>>w;
add_edge(u, v, w);
add_edge(v, u, w);
}
ll ans = INF;
for(int i = ; i <= n; i++){
ans = min(ans, work(i));
}
cout<<ans<<endl;
}
return ;
}

hihoCoder编程练习赛67的更多相关文章

  1. hihocoder 编程练习赛23

    第一题:H国的身份证号码I 题意:一个N位的正整数(首位不能是0).每位数字都小于等于K,并且任意相邻两位数字的乘积也小于等于K.按从小到大的顺序输出所有合法的N位号码,每个号码占一行. 思路:dfs ...

  2. hihocoder编程练习赛75

    题目1 : 工作城市分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 H公司在北京和上海两个城市各有一间办公室.该公司最近新招募了2N名员工,小Hi负责把这2N名员工 ...

  3. hihoCoder编程练习赛72

    题目1 : 玩具设计师 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho作为Z国知名玩具品牌AKIRE的首席设计师,对玩具零件的挑剔程度已经到了叹为观止的地步.所有 ...

  4. hihoCoder编程练习赛70

    题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 ...

  5. hihoCoder编程练习赛69

    题目1 : 偶数长度回文子串 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个小写字母字符串,请判断它是否有长度为偶数的非空连续回文子串 输入 输入包含多组数据. ...

  6. hihoCoder编程练习赛52

    题目1 : 字符串排序 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 一般我们在对字符串排序时,都会按照字典序排序.当字符串只包含小写字母时,相当于按字母表" ...

  7. hihoCoder编程练习赛49

    题目1 : 相似颜色 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在CSS中我们可以用井号(#)加6位十六进制数表示一种颜色,例如#000000是黑色,#ff0000 ...

  8. hihocoder编程练习赛91:相邻字符串

    题目链接 给定一个长度小于1e5的字符串s,s中字符全是大写英语字母.现在要寻找s中有多少组邻近的"hio"字符串,邻近的定义如下:hi距离+io距离+ho距离小于k.输入k和s, ...

  9. 【hihocoder编程练习赛9】闰秒

    题目链接 #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h&g ...

随机推荐

  1. java继承多态和抽象类接口

    一.继承 通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类.已有的称为父类,新的类称为子类(父类派生子类,子类继承父类).(1)继承的优点:    ①代码的可重用性:    ②父类的属性 ...

  2. 简单读!spring-mvc源码之url的暴露之路

    spring中,注册controller的url有多种方式: 1. 你可以啥都不都干,直接使用 @RequestMapping 注解上体路径,然后加上 <component-scan>, ...

  3. MySQL(5)---锁

    锁 一概述 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.对于任何一种数据库来说都需要有相应的锁定机制. MySQL各存储引擎使用了三种 ...

  4. java提高(6)---Serializable

    Serializable--初解 一 序列化是干什么的? 我们知道,在jvm中引用数据类型存在于栈中,而new创建出的对象存在于堆中.如果电脑断电那么存在于内存中的对象就会丢失.那么有没有方法将对象保 ...

  5. mybatis框架(1)---mybatis入门

    mybatis入门   MyBatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了goog ...

  6. 关于 Spring Security OAuth2 中 Feign 调用 Token 问题

    微服务体系中,避免不了服务之间链式调用,一般使用 Feign ,由于使用 Spring Security OAuth2 全局做了安全认证,简单的一种实现方式就是在服务提供方获得 Token 再次通过 ...

  7. 大数据入门基础系列之Hadoop1.X、Hadoop2.X和Hadoop3.X的多维度区别详解(博主推荐)

    不多说,直接上干货! 在前面的博文里,我已经介绍了 大数据入门基础系列之Linux操作系统简介与选择 大数据入门基础系列之虚拟机的下载.安装详解 大数据入门基础系列之Linux的安装详解 大数据入门基 ...

  8. 在Mac下连接阿里云服务器

    1.登录 ssh root@IP地址 eg:00.00.00.00 2.新建用户 useradd -d /home/用户名 -m 根目录名 (这条命令,就是创建一个新用户,并给该用户在home目录下创 ...

  9. Linux常用命令之压缩和解压缩命令

    目录 1.压缩解压缩格式 .gz 一.将文件压缩为 .gz 格式,只能压缩文件:gzip 二.将 .gz 文件解压:gunzip 2.压缩解压缩格式 .tar.gz 一.将文件或目录压缩为 .tar. ...

  10. 里氏替换原则(LSP)

    替换原则由MIT计算机科学实验室的Liskov女士在1987年的OOPSLA大会上的一篇文章中提出,主要阐述有关继承的一些原则,故称里氏替换原则. 2002年,Robert C.Martin出版了一本 ...