hohahola

  1. #pragma comment(linker, "/STACK:102400000,102400000")
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<vector>
  6. #include<algorithm>
  7. #include<iostream>
  8. #include<map>
  9. #include<queue>
  10. #include<stack>
  11. #include<string>
  12. #include<functional>
  13. #include<math.h>
  14. //#include<bits/stdc++.h>
  15. using namespace std;
  16. typedef long long lint;
  17. typedef vector<int> VI;
  18. typedef pair<int, int> PII;
  19. typedef queue<int> QI;
  20.  
  21. void makedata() {
  22. freopen("input.txt", "w", stdout);
  23. fclose(stdout);
  24. }
  25.  
  26. int main() {
  27. #ifndef ONLINE_JUDGE
  28. freopen("input.txt", "r", stdin);
  29. #endif
  30. //makedata();
  31. std::ios::sync_with_stdio(), cin.tie();
  32. lint n, x, y, z;
  33. cin >> n >> x >> y >> z;
  34. if (z >= y) cout << (n * z / x) << endl;
  35. else {
  36. lint l = , r = n, mid;
  37. lint ans = ;
  38. while (l + < r) {
  39. mid = (l + r) / ;
  40. if ((n - mid) * z >= (x - y) * mid) {
  41. l = mid;
  42. ans = max(ans, mid);
  43. } else r = mid;
  44. }
  45. cout << ans << endl;
  46. }
  47. return ;
  48. }

最大顺子

要使顺子的值最大,m张任意牌肯定全用完了,因为任意牌可以放在有数字的牌的右边

  1. #pragma comment(linker, "/STACK:102400000,102400000")
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<vector>
  6. #include<algorithm>
  7. #include<iostream>
  8. #include<map>
  9. #include<queue>
  10. #include<stack>
  11. #include<string>
  12. #include<functional>
  13. #include<math.h>
  14. //#include<bits/stdc++.h>
  15. using namespace std;
  16. typedef long long lint;
  17. typedef vector<int> VI;
  18. typedef pair<int, int> PII;
  19. typedef queue<int> QI;
  20.  
  21. void makedata() {
  22. freopen("input.txt", "w", stdout);
  23. fclose(stdout);
  24. }
  25.  
  26. lint a[], f[], s[];
  27.  
  28. int main() {
  29. #ifndef ONLINE_JUDGE
  30. freopen("input.txt", "r", stdin);
  31. #endif
  32. //makedata();
  33. std::ios::sync_with_stdio(), cin.tie();
  34. int n, m, k;
  35. cin >> n >> m >> k;
  36. for (int i = ; i < n; i++) cin >> a[i];
  37. sort(a, a + n);
  38. lint ans = ;
  39. int p = k - m;
  40. for (int i = ; i + p - < n; i++) {
  41. int j = i + p - ;
  42. if (a[j] - a[i] + - p <= m) ans = max(ans, a[i] + k - );
  43. }
  44. cout << ans << endl;
  45. return ;
  46. }

路径包含问题

  1. #pragma comment(linker, "/STACK:102400000,102400000")
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<vector>
  6. #include<algorithm>
  7. #include<iostream>
  8. #include<map>
  9. #include<queue>
  10. #include<stack>
  11. #include<string>
  12. #include<functional>
  13. #include<math.h>
  14. //#include<bits/stdc++.h>
  15. using namespace std;
  16. typedef long long lint;
  17. typedef vector<int> VI;
  18. typedef pair<int, int> PII;
  19. typedef queue<int> QI;
  20.  
  21. void makedata() {
  22. freopen("input.txt", "w", stdout);
  23. fclose(stdout);
  24. }
  25.  
  26. class LCA {
  27. public:
  28. int n;
  29. int ancient[][], depth[], father[], sz[];
  30. vector<vector<int>> * T;
  31. void init(vector<vector<int>> *, int, int);
  32. void dfs(int, int, int);
  33. int query(int, int);
  34. };
  35. void LCA::dfs(int root, int fa, int dep) {
  36. ancient[root][] = fa;
  37. depth[root] = dep;
  38. sz[root] = ;
  39. for (int i = ; i < (*T)[root].size(); i++) {
  40. int u = (*T)[root][i];
  41. if (u == fa) continue;
  42. dfs(u, root, dep + );
  43. sz[root] += sz[u];
  44. }
  45. }
  46. void LCA::init(vector<vector<int>> * G, int root, int nn) {
  47. T = G, n = nn;
  48. dfs(root, -, );
  49. for (int i = ; i < ; i++) ancient[root][i] = -;
  50. for (int i = ; i < ; i++) {
  51. for (int j = ; j <= n; j++) {
  52. if (ancient[j][i - ] == -) ancient[j][i] = -;
  53. else ancient[j][i] = ancient[ancient[j][i - ]][i - ];
  54. }
  55. }
  56. }
  57. int LCA::query(int u, int v) {
  58. if (depth[u] > depth[v]) swap(u, v);
  59. int d = ;
  60. while (depth[u] != depth[v]) {
  61. if ((depth[v] - depth[u]) & ( << d)) v = ancient[v][d];
  62. d++;
  63. }
  64. if (u == v) return u;
  65. for (int i = ; i >= ; i--) {
  66. if (ancient[u][i] != ancient[v][i]) u = ancient[u][i], v = ancient[v][i];
  67. }
  68. return ancient[u][];
  69. }
  70.  
  71. LCA lca;
  72. vector<vector<int>> G(, vector<int>());;
  73. int main() {
  74. #ifndef ONLINE_JUDGE
  75. freopen("input.txt", "r", stdin);
  76. #endif
  77. //makedata();
  78. std::ios::sync_with_stdio(), cin.tie();
  79. int n, m, u, v;
  80. cin >> n >> m;
  81. for (int i = ; i < n; i++) {
  82. cin >> u >> v;
  83. G[u].push_back(v);
  84. }
  85. lca.init(&G, , n);
  86. for (int i = ; i < m; i++) {
  87. cin >> u >> v;
  88. if (lca.depth[u] > lca.depth[v]) swap(u, v);
  89. int w = lca.query(u, v), vv = v;
  90. if (w == u) {
  91. int d = ;
  92. while (lca.depth[u] != lca.depth[vv] - ) {
  93. if ((lca.depth[vv] - - lca.depth[u]) & ( << d)) vv = lca.ancient[vv][d];
  94. d++;
  95. }
  96. cout << (1LL * (n - lca.sz[vv])*lca.sz[v]) << endl;
  97. } else cout << (1LL * lca.sz[u] * lca.sz[v]) << endl;
  98. }
  99. return ;
  100. }

树上的节点cd之间有两种关系,其中一个是另一个的祖先,或两者都不是对方的祖先,判断两者的关系,把路径两端的点的数量相乘

随机排列

枚举左边界

  1. #pragma comment(linker, "/STACK:102400000,102400000")
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<vector>
  6. #include<algorithm>
  7. #include<iostream>
  8. #include<map>
  9. #include<queue>
  10. #include<stack>
  11. #include<string>
  12. #include<functional>
  13. #include<math.h>
  14. //#include<bits/stdc++.h>
  15. using namespace std;
  16. typedef long long lint;
  17. typedef vector<int> VI;
  18. typedef pair<int, int> PII;
  19. typedef queue<int> QI;
  20.  
  21. void makedata() {
  22. freopen("input.txt", "w", stdout);
  23. fclose(stdout);
  24. }
  25.  
  26. lint ans[];
  27. int a[], m[][], M[][], LOG2[];
  28.  
  29. void init(int n) {
  30. for (int i = ; i <= n; i++) LOG2[i] = LOG2[i >> ] + ;
  31. for (int i = ; i <= n; i++) m[i][] = M[i][] = a[i];
  32. for (int j = ; ( << j) <= n; j++) {
  33. for (int i = ; i + ( << j) - <= n; i++) {
  34. m[i][j] = min(m[i][j - ], m[i + ( << (j - ))][j - ]);
  35. M[i][j] = max(M[i][j - ], M[i + ( << (j - ))][j - ]);
  36. }
  37. }
  38. }
  39. int query(int l, int r) {
  40. int k = LOG2[r - l + ];
  41. return max(M[l][k], M[r - ( << k) + ][k]) - min(m[l][k], m[r - ( << k) + ][k]);
  42. }
  43.  
  44. VI R, C;
  45.  
  46. int main() {
  47. #ifndef ONLINE_JUDGE
  48. freopen("input.txt", "r", stdin);
  49. #endif
  50. //makedata();
  51. std::ios::sync_with_stdio(), cin.tie();
  52. int n, t;
  53. cin >> t;
  54. while (t--) {
  55. cin >> n;
  56. for (int i = ; i <= n; i++) cin >> a[i];
  57. memset(ans, , sizeof(ans));
  58. init(n);
  59. R.clear();
  60. for (int i = n; i >= ; i--) {
  61. C = R;
  62. R.clear();
  63. R.push_back(i);
  64. for (int j = ; j < C.size(); j++) {
  65. if (query(i, R[R.size() - ]) != query(i, C[j])) R.push_back(C[j]);
  66. }
  67. for (int j = ; j < R.size() - ; j++) ans[query(i, R[j])] += R[j + ] - R[j];
  68. ans[query(i, R[R.size() - ])] += n - R[R.size() - ] + ;
  69. }
  70. for (int i = ; i < n; i++) {
  71. cout << ans[i] << endl;
  72. ans[i + ] += ans[i];
  73. }
  74. }
  75. return ;
  76. }

[hihocoder][Offer收割]编程练习赛60的更多相关文章

  1. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  2. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  3. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  4. hihocoder [Offer收割]编程练习赛14 剑刃风暴

    题目4 : 剑刃风暴 时间限制:20000ms 单点时限:2000ms 内存限制:256MB 描述 主宰尤涅若拥有一招非常厉害的招式——剑刃风暴,“无论是战士还是法师,都害怕尤涅若的武士刀剑技”. 现 ...

  5. hihocoder offer收割编程练习赛8 C 数组分拆

    思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = s ...

  6. hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)

    题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x ...

  7. hihoCoder [Offer收割]编程练习赛3 D子矩阵求和

    子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常 ...

  8. hihocoder [Offer收割]编程练习赛52 D 部门聚会

    看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半 ...

  9. hihocoder [Offer收割]编程练习赛14

    A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把 ...

随机推荐

  1. ubuntu18.04安装chrome浏览器

    前几天把系统弄崩溃了,弄了好久也没弄好,索性直接装18.04,下面是安装chrom浏览器的步骤,网络上照着16.04安装的,应该是一样的 启动终端. 输入以下命令: sudo wget http:// ...

  2. 【Codeforces 158B】Taxi

    [链接] 我是链接,点我呀:) [题意] 每辆车可以载重4个人. 一共有n个组,每个组分别有s[i]个人. 要求每个组的人都在同一辆车里面. 问最少需要多少辆车 [题解] 将每个组的人数从小到大排序. ...

  3. 【codeforces 755E】PolandBall and White-Red graph

    [题目链接]:http://codeforces.com/contest/755/problem/E [题意] 给你n个节点; 让你在这些点之间接若干条边;构成原图(要求n个节点都联通) 然后分别求出 ...

  4. Ch’s gift

    Ch’s gift Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Proble ...

  5. linux 内核视频-英本网

    01.Linux内核学习入门        http://v.youku.com/v_show/id_XNjc1NzEzODAw.html02.Linux内核介绍            http:// ...

  6. linux下的C语言开发(gdb调试)

    原文: http://blog.csdn.net/feixiaoxing/article/details/7199643 用gdb调试多进程的程序会遇到困难,gdb只能跟踪一个进程(默认是跟踪父进程) ...

  7. SSH整合开发时Scope为默认时现象与原理

    1.前提知识 1)scope默认值 进行SSH整合开发时,Struts2的action须要用spring容器进行管理,仅仅要涉及到类以bean的形式入到spring容器中.无论是xml配置还是使用注解 ...

  8. js面向对象初步探究(上) js面向对象的5种写方法

    非常长一段时间看网上大神的JS代码特别吃力.那种面向对象的写法方式让人看得云里来雾里去.于是就研究了一下JS面向对象.因为是初学,就将自己在网上找到的资料整理一下,作为记忆. js面向对象的5种写方法 ...

  9. POJ 3748:位操作

    位操作 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8964   Accepted: 3581 Description 如 ...

  10. 升级到VS2013常见问题

    问题1: Building an MFC project for a non-Unicode character set is deprecated 解决方法: 用于多字节字符编码 (MBCS) 的 ...