题目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}

样例输入

  1. 2 3

样例输出

  1. 2
  1. #include <iostream>
  2. #define ll long long
  3.  
  4. using namespace std;
  5.  
  6. const ll MOD = ;
  7.  
  8. int main()
  9. {
  10. ll n, p;
  11. while(cin>>n>>p){
  12. ll ans = ;
  13. p--;
  14. while(n--){
  15. ans *= p;
  16. ans %= MOD;
  17. p--;
  18. }
  19. cout<<ans<<endl;
  20. }
  21.  
  22. return ;
  23. }

题目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 取模后的值

样例输入
  1. 2 2 100000
样例输出
  1. 4
  1. def quick_pow(a, n, mod):
  2. ans = 1
  3. while(n!=0):
  4. if(n%2==1):
  5. ans = ans*a%mod
  6. a = a*a%mod
  7. n = n // 2
  8. return ans
  9.  
  10. if __name__ == '__main__':
  11. n, k, mod = raw_input().strip().split()
  12. n = long(n)
  13. k = long(k)
  14. mod = long(mod)
  15. 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) 都可以

样例输入
  1. 4 2 3
  2. 0 -2 -2 0
样例输出
  1. 3
  1. #include <iostream>
  2. #define ll long long
  3.  
  4. using namespace std;
  5.  
  6. const int N = ;
  7.  
  8. ll arr[N];
  9.  
  10. ll dp(ll n){
  11. ll ans = ;
  12. ll sum = ;
  13. for(int i = ; i <n; i++){
  14. sum += arr[i];
  15. ans = max(ans, sum);
  16. if(sum < )sum = ;
  17. }
  18. return ans;
  19. }
  20.  
  21. int main()
  22. {
  23. ll n, A, B;
  24. while(cin>>n>>A>>B){
  25. for(int i = ; i < n; i++){
  26. cin>>arr[i];
  27. if(A<)arr[i] *= -;
  28. }
  29. if(A<)cout<<-A*dp(n)+B<<endl;
  30. else cout<<A*dp(n)+B<<endl;
  31. }
  32.  
  33. return ;
  34. }

题目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 作为会议城市

样例输入
  1. 3 1
  2. 1 2 3
  3. 1 2 1
  4. 2 3 2
样例输出
  1. 1
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstring>
  4. #include <algorithm>
  5.  
  6. #define ll long long
  7.  
  8. using namespace std;
  9.  
  10. const int N = ;
  11. const ll INF = 0x3f3f3f3f3f3f3f3f;
  12.  
  13. ll arr[N], sum[N];
  14.  
  15. struct Edge{
  16. int to, w, next;
  17. }edges[*N];
  18. int head[N], tot;
  19.  
  20. void init(){
  21. memset(head, -, sizeof(head));
  22. tot = ;
  23. }
  24.  
  25. void add_edge(int u, int v, int w){
  26. edges[tot].to = v;
  27. edges[tot].w = w;
  28. edges[tot].next = head[u];
  29. head[u] = tot++;
  30. }
  31.  
  32. vector<ll> vec;
  33. int n, k;
  34.  
  35. void dfs(int u, int fa){
  36. sum[u] = arr[u];
  37. for(int i = head[u]; i != -; i = edges[i].next){
  38. int v = edges[i].to;
  39. int w = edges[i].w;
  40. if(v != fa){
  41. dfs(v, u);
  42. sum[u] += sum[v];
  43. vec.push_back(sum[v]*w);
  44. }
  45. }
  46. }
  47.  
  48. ll work(int s){
  49. vec.clear();
  50.  
  51. dfs(s, );
  52. sort(vec.begin(), vec.end());
  53. ll ans = ;
  54. for(int i = ; i < n-k-; i++)
  55. ans += vec[i];
  56. return ans;
  57. }
  58.  
  59. int main()
  60. {
  61. while(cin>>n>>k){
  62. for(int i = ; i <= n; i++)
  63. cin>>arr[i];
  64. int u, v, w;
  65. init();
  66. for(int i = ; i < n-; i++){
  67. cin>>u>>v>>w;
  68. add_edge(u, v, w);
  69. add_edge(v, u, w);
  70. }
  71. ll ans = INF;
  72. for(int i = ; i <= n; i++){
  73. ans = min(ans, work(i));
  74. }
  75. cout<<ans<<endl;
  76. }
  77. return ;
  78. }
  1.  

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. 《响应式Web设计实践》学习笔记

    原书: 响应式Web设计实践 目录: 第2章 流动布局 1. 布局选项 2. 字体大小 3. 网格布局 4. 混合固定宽度和流动宽度 第3章 媒介查询 1. 视口 2. 媒介查询结构 3. 内嵌样式与 ...

  2. Nerd的套现ATM机

    Nerd是一群似乎只在学生阶段才出尽风头的人.不善言辞,闷头学习,每遇考试便战功赫赫风光无限,赢得天下名.这样的描述,对那些成绩一般.喜欢天马行空.甚至有些多动症倾向的人来讲,无异于是噩梦.幸好有社会 ...

  3. dcloud 近期遇到的小知识一览

    1.form-data时,请求头改变为application/x-www-form-urlencoded. 2.下拉刷新,首先在page.json里面的style将enablePullDownRefr ...

  4. Java集合排序(面试必考点之一)

    集合是Java面试必考知识点,而集合的排序也是非常重要的,工作中经常用到,那么这个知识点也是必须要掌握的,下面是我曾经面试时被面试官问的问题: 根据API可知,Java集合的工具类Collection ...

  5. HotSpot 的垃圾收集器

    上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用,收集器所处的区域,则表示它是属于新生代还是老年代收集器. 并行(Parallel):指多条垃圾收集器线程并行工 ...

  6. cryptoJS AES 加解密简单使用

    简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...

  7. java 实现一个beautiful的弹层和具体功能

    先看一下弹层的效果: 点击确定跳转百度页面,点击取消弹层消失. 我这个弹层是在layui找的, 1. 需要layui.css文件和layui.js文件 (想我这样笨的人,没有同学的告知,我都不知道去哪 ...

  8. 带你一文了解Python中的运算符

    运算符 目标 算数运算符 比较(关系)运算符 逻辑运算符 赋值运算符 运算符的优先级 数学符号表链接:https://zh.wikipedia.org/wiki/数学符号表 01. 算数运算符 是完成 ...

  9. WHERE 子句用于规定选择的标准

    WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句. (也称条件查询语句) 语法SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 下面的& ...

  10. java的四种内部类详解

    引言 内部类,嵌套在另一个类的里面,所以也称为:嵌套类; 内部类分为以下四种: 静态内部类 成员内部类 局部内部类 匿名内部类 一.静态内部类 静态内部类: 一般也称"静态嵌套类" ...