题目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. FFmpeg命令行工具学习(四):FFmpeg 采集设备

    在使用 FFmpeg 作为编码器时,可以使用FFmpeg采集本地的音视频采集设备的数据,然后进行编码.封装.传输等操作. 例如,我们可以采集摄像头的图像作为视频,采集麦克风的数据作为音频,然后对采集的 ...

  2. CAS单点登录原理简单介绍

    1. SSO简介 1.1 单点登录定义 单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统. ...

  3. 安卓网络访问(xUtils3)

    xUtils3是安卓网络访问的重要库,基本上的网络请求所涉及的内容都有集成.笔者将实现xUtils3的简单使用,包括简单GET和POST请求.文件上传.文件下载.图片显示. 其主要特性有以下几点: ① ...

  4. [Objective-C语言教程]数组(14)

    Objective-C编程语言提供了一种叫作数组的数据结构,它可以存储相同类型的固定大小顺序元素的集合.数组用于存储数据集合,但将数组视为相同类型的变量集合通常更有用. 可以声明一个数组变量(例如nu ...

  5. 漫谈golang之fmt格式化模块

    fmt 漫谈 Go Walkthrough: fmt fmt常用的格式化字符串 %v 是个通用的占位符.它会自动将变量转换为默认格式的字符串,这在打印字符串或数字等原语时非常有用,而且不需要特定的选项 ...

  6. 【云服务器部署】---Linux下安装nginx

    [云服务器部署]---Linux下安装nginx 之前两篇,分别讲了:Linux下安装MySQL  和  springboot项目部署云服务器 nginx安装也是挺简单的.具体步骤如下: 第一步,下载 ...

  7. rest-framework之权限组件

    权限 权限 作用 : 校验用户是否有权限访问 检测权限肯定是在用户认证通过之后,所有可以直接在request中取出用户做判断 先定义一个类,继承 BasePermission. from rest_f ...

  8. intellij idea maven project 无法显示dependencies

    Intellj 自动载入Mave依赖是一个很人性化的功能,但不排除有时候会碰到问题,导致pom文件修改却没有触发自动重新载入的动作或者加载中途出现弱网的情况中断载入的,此时需要手动强制更新依赖. 如下 ...

  9. 求一个Map中最大的value值,同时列出键,值

    求一个Map中最大的value值,同时列出键,值 方法1. public static void main(String[] args){  Map map=new HashMap();  map.p ...

  10. Java IO API记录

    文件路径: public static final String FILEPATH= File.separator+"Users"+ File.separator+"xu ...