hihoCoder编程练习赛67
题目1 : 序列
描述
给定两个正整数 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 : 彩球
描述
有一家商店,一共有 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 : 最优子段
描述
给定一个长度为 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 : 公路收费
描述
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的更多相关文章
- hihocoder 编程练习赛23
第一题:H国的身份证号码I 题意:一个N位的正整数(首位不能是0).每位数字都小于等于K,并且任意相邻两位数字的乘积也小于等于K.按从小到大的顺序输出所有合法的N位号码,每个号码占一行. 思路:dfs ...
- hihocoder编程练习赛75
题目1 : 工作城市分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 H公司在北京和上海两个城市各有一间办公室.该公司最近新招募了2N名员工,小Hi负责把这2N名员工 ...
- hihoCoder编程练习赛72
题目1 : 玩具设计师 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho作为Z国知名玩具品牌AKIRE的首席设计师,对玩具零件的挑剔程度已经到了叹为观止的地步.所有 ...
- hihoCoder编程练习赛70
题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 ...
- hihoCoder编程练习赛69
题目1 : 偶数长度回文子串 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个小写字母字符串,请判断它是否有长度为偶数的非空连续回文子串 输入 输入包含多组数据. ...
- hihoCoder编程练习赛52
题目1 : 字符串排序 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 一般我们在对字符串排序时,都会按照字典序排序.当字符串只包含小写字母时,相当于按字母表" ...
- hihoCoder编程练习赛49
题目1 : 相似颜色 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在CSS中我们可以用井号(#)加6位十六进制数表示一种颜色,例如#000000是黑色,#ff0000 ...
- hihocoder编程练习赛91:相邻字符串
题目链接 给定一个长度小于1e5的字符串s,s中字符全是大写英语字母.现在要寻找s中有多少组邻近的"hio"字符串,邻近的定义如下:hi距离+io距离+ho距离小于k.输入k和s, ...
- 【hihocoder编程练习赛9】闰秒
题目链接 #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h&g ...
随机推荐
- 为什么要学习 Spring Boot?
我们知道,从 2002 年开始,Spring 一直在飞速的发展,如今已经成为了在Java EE(Java Enterprise Edition)开发中真正意义上的标准,但是随着技术的发展,Java E ...
- xampp运行MySQL shutdown unexpectedly解决方案
昨天晚上自己的网站突然打不开了,以为被人黑了.想想不应该啊,这小站不会有人关注的,于是登录服务器看了下,发现是Mysql打不开了 很奇怪,因为今天白天还是可以打开的,下班后也没有碰过服务器 首先看看是 ...
- Ubuntu18.04搭建nodejs环境
首先安装sudo apt install curl 然后安装命令(当前最新版本是0.33.2,最新版本可以在https://github.com/creationix/nvm查看): curl -o- ...
- spring中的mybatis的sqlSession是如何做到线程隔离的?
项目中常常使用mybatis配合spring进行数据库操作,但是我们知道,数据的操作是要求做到线程安全的,而且按照原来的jdbc的使用方式,每次操作完成之后都要将连接关闭,但是实际使用中我们并没有这么 ...
- alibaba的FastJson找不到JSON对象问题
在现在出现使用JSON.toJsonString()方法时,可能没有JSON这个对象. 这种问题可能是下载的jar版本比较高.在低版本的jar使用的是JSON对象. 我使用的是1.2.47版本的jar ...
- idea导入maven项目 傻瓜都能看懂
1.找到你需要导入的项目 2.打开idea ------------------------------------------------------------------------------ ...
- ffmpeg常用转换命令
音频转换: 1.转换amr到mp3: ffmpeg -i shenhuxi.amr amr2mp3.mp3 2.转换amr到wav: ffmpeg -acodec libamr_nb -i shenh ...
- StringBuffer 和 StringBuilder 的 3 个区别
StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题.这么简单的一道题,栈长在最近的面试过程中,却经常遇到很 ...
- python(leetcode)-1.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- Android布局:宽度适应的横向跟随,防止挤掉重要视图
不知道这样的布局该怎么描述,标题也是乱取的..直接上图吧 最近遇到了这样要求的布局: 1.上图中的“标题”长度不定,“状态”标签可能有多个并紧跟在标题右边,“属性”一直居右显示: 2.当“标题”过长, ...