[hihocoder][Offer收割]编程练习赛60
hohahola
- #pragma comment(linker, "/STACK:102400000,102400000")
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<vector>
- #include<algorithm>
- #include<iostream>
- #include<map>
- #include<queue>
- #include<stack>
- #include<string>
- #include<functional>
- #include<math.h>
- //#include<bits/stdc++.h>
- using namespace std;
- typedef long long lint;
- typedef vector<int> VI;
- typedef pair<int, int> PII;
- typedef queue<int> QI;
- void makedata() {
- freopen("input.txt", "w", stdout);
- fclose(stdout);
- }
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- #endif
- //makedata();
- std::ios::sync_with_stdio(), cin.tie();
- lint n, x, y, z;
- cin >> n >> x >> y >> z;
- if (z >= y) cout << (n * z / x) << endl;
- else {
- lint l = , r = n, mid;
- lint ans = ;
- while (l + < r) {
- mid = (l + r) / ;
- if ((n - mid) * z >= (x - y) * mid) {
- l = mid;
- ans = max(ans, mid);
- } else r = mid;
- }
- cout << ans << endl;
- }
- return ;
- }
最大顺子
要使顺子的值最大,m张任意牌肯定全用完了,因为任意牌可以放在有数字的牌的右边
- #pragma comment(linker, "/STACK:102400000,102400000")
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<vector>
- #include<algorithm>
- #include<iostream>
- #include<map>
- #include<queue>
- #include<stack>
- #include<string>
- #include<functional>
- #include<math.h>
- //#include<bits/stdc++.h>
- using namespace std;
- typedef long long lint;
- typedef vector<int> VI;
- typedef pair<int, int> PII;
- typedef queue<int> QI;
- void makedata() {
- freopen("input.txt", "w", stdout);
- fclose(stdout);
- }
- lint a[], f[], s[];
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- #endif
- //makedata();
- std::ios::sync_with_stdio(), cin.tie();
- int n, m, k;
- cin >> n >> m >> k;
- for (int i = ; i < n; i++) cin >> a[i];
- sort(a, a + n);
- lint ans = ;
- int p = k - m;
- for (int i = ; i + p - < n; i++) {
- int j = i + p - ;
- if (a[j] - a[i] + - p <= m) ans = max(ans, a[i] + k - );
- }
- cout << ans << endl;
- return ;
- }
路径包含问题
- #pragma comment(linker, "/STACK:102400000,102400000")
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<vector>
- #include<algorithm>
- #include<iostream>
- #include<map>
- #include<queue>
- #include<stack>
- #include<string>
- #include<functional>
- #include<math.h>
- //#include<bits/stdc++.h>
- using namespace std;
- typedef long long lint;
- typedef vector<int> VI;
- typedef pair<int, int> PII;
- typedef queue<int> QI;
- void makedata() {
- freopen("input.txt", "w", stdout);
- fclose(stdout);
- }
- class LCA {
- public:
- int n;
- int ancient[][], depth[], father[], sz[];
- vector<vector<int>> * T;
- void init(vector<vector<int>> *, int, int);
- void dfs(int, int, int);
- int query(int, int);
- };
- void LCA::dfs(int root, int fa, int dep) {
- ancient[root][] = fa;
- depth[root] = dep;
- sz[root] = ;
- for (int i = ; i < (*T)[root].size(); i++) {
- int u = (*T)[root][i];
- if (u == fa) continue;
- dfs(u, root, dep + );
- sz[root] += sz[u];
- }
- }
- void LCA::init(vector<vector<int>> * G, int root, int nn) {
- T = G, n = nn;
- dfs(root, -, );
- for (int i = ; i < ; i++) ancient[root][i] = -;
- for (int i = ; i < ; i++) {
- for (int j = ; j <= n; j++) {
- if (ancient[j][i - ] == -) ancient[j][i] = -;
- else ancient[j][i] = ancient[ancient[j][i - ]][i - ];
- }
- }
- }
- int LCA::query(int u, int v) {
- if (depth[u] > depth[v]) swap(u, v);
- int d = ;
- while (depth[u] != depth[v]) {
- if ((depth[v] - depth[u]) & ( << d)) v = ancient[v][d];
- d++;
- }
- if (u == v) return u;
- for (int i = ; i >= ; i--) {
- if (ancient[u][i] != ancient[v][i]) u = ancient[u][i], v = ancient[v][i];
- }
- return ancient[u][];
- }
- LCA lca;
- vector<vector<int>> G(, vector<int>());;
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- #endif
- //makedata();
- std::ios::sync_with_stdio(), cin.tie();
- int n, m, u, v;
- cin >> n >> m;
- for (int i = ; i < n; i++) {
- cin >> u >> v;
- G[u].push_back(v);
- }
- lca.init(&G, , n);
- for (int i = ; i < m; i++) {
- cin >> u >> v;
- if (lca.depth[u] > lca.depth[v]) swap(u, v);
- int w = lca.query(u, v), vv = v;
- if (w == u) {
- int d = ;
- while (lca.depth[u] != lca.depth[vv] - ) {
- if ((lca.depth[vv] - - lca.depth[u]) & ( << d)) vv = lca.ancient[vv][d];
- d++;
- }
- cout << (1LL * (n - lca.sz[vv])*lca.sz[v]) << endl;
- } else cout << (1LL * lca.sz[u] * lca.sz[v]) << endl;
- }
- return ;
- }
树上的节点cd之间有两种关系,其中一个是另一个的祖先,或两者都不是对方的祖先,判断两者的关系,把路径两端的点的数量相乘
随机排列
枚举左边界
- #pragma comment(linker, "/STACK:102400000,102400000")
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<vector>
- #include<algorithm>
- #include<iostream>
- #include<map>
- #include<queue>
- #include<stack>
- #include<string>
- #include<functional>
- #include<math.h>
- //#include<bits/stdc++.h>
- using namespace std;
- typedef long long lint;
- typedef vector<int> VI;
- typedef pair<int, int> PII;
- typedef queue<int> QI;
- void makedata() {
- freopen("input.txt", "w", stdout);
- fclose(stdout);
- }
- lint ans[];
- int a[], m[][], M[][], LOG2[];
- void init(int n) {
- for (int i = ; i <= n; i++) LOG2[i] = LOG2[i >> ] + ;
- for (int i = ; i <= n; i++) m[i][] = M[i][] = a[i];
- for (int j = ; ( << j) <= n; j++) {
- for (int i = ; i + ( << j) - <= n; i++) {
- m[i][j] = min(m[i][j - ], m[i + ( << (j - ))][j - ]);
- M[i][j] = max(M[i][j - ], M[i + ( << (j - ))][j - ]);
- }
- }
- }
- int query(int l, int r) {
- int k = LOG2[r - l + ];
- return max(M[l][k], M[r - ( << k) + ][k]) - min(m[l][k], m[r - ( << k) + ][k]);
- }
- VI R, C;
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- #endif
- //makedata();
- std::ios::sync_with_stdio(), cin.tie();
- int n, t;
- cin >> t;
- while (t--) {
- cin >> n;
- for (int i = ; i <= n; i++) cin >> a[i];
- memset(ans, , sizeof(ans));
- init(n);
- R.clear();
- for (int i = n; i >= ; i--) {
- C = R;
- R.clear();
- R.push_back(i);
- for (int j = ; j < C.size(); j++) {
- if (query(i, R[R.size() - ]) != query(i, C[j])) R.push_back(C[j]);
- }
- for (int j = ; j < R.size() - ; j++) ans[query(i, R[j])] += R[j + ] - R[j];
- ans[query(i, R[R.size() - ])] += n - R[R.size() - ] + ;
- }
- for (int i = ; i < n; i++) {
- cout << ans[i] << endl;
- ans[i + ] += ans[i];
- }
- }
- return ;
- }
[hihocoder][Offer收割]编程练习赛60的更多相关文章
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- hihocoder [Offer收割]编程练习赛14 剑刃风暴
题目4 : 剑刃风暴 时间限制:20000ms 单点时限:2000ms 内存限制:256MB 描述 主宰尤涅若拥有一招非常厉害的招式——剑刃风暴,“无论是战士还是法师,都害怕尤涅若的武士刀剑技”. 现 ...
- hihocoder offer收割编程练习赛8 C 数组分拆
思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = s ...
- hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)
题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x ...
- hihoCoder [Offer收割]编程练习赛3 D子矩阵求和
子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常 ...
- hihocoder [Offer收割]编程练习赛52 D 部门聚会
看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半 ...
- hihocoder [Offer收割]编程练习赛14
A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把 ...
随机推荐
- ubuntu18.04安装chrome浏览器
前几天把系统弄崩溃了,弄了好久也没弄好,索性直接装18.04,下面是安装chrom浏览器的步骤,网络上照着16.04安装的,应该是一样的 启动终端. 输入以下命令: sudo wget http:// ...
- 【Codeforces 158B】Taxi
[链接] 我是链接,点我呀:) [题意] 每辆车可以载重4个人. 一共有n个组,每个组分别有s[i]个人. 要求每个组的人都在同一辆车里面. 问最少需要多少辆车 [题解] 将每个组的人数从小到大排序. ...
- 【codeforces 755E】PolandBall and White-Red graph
[题目链接]:http://codeforces.com/contest/755/problem/E [题意] 给你n个节点; 让你在这些点之间接若干条边;构成原图(要求n个节点都联通) 然后分别求出 ...
- Ch’s gift
Ch’s gift Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Proble ...
- linux 内核视频-英本网
01.Linux内核学习入门 http://v.youku.com/v_show/id_XNjc1NzEzODAw.html02.Linux内核介绍 http:// ...
- linux下的C语言开发(gdb调试)
原文: http://blog.csdn.net/feixiaoxing/article/details/7199643 用gdb调试多进程的程序会遇到困难,gdb只能跟踪一个进程(默认是跟踪父进程) ...
- SSH整合开发时Scope为默认时现象与原理
1.前提知识 1)scope默认值 进行SSH整合开发时,Struts2的action须要用spring容器进行管理,仅仅要涉及到类以bean的形式入到spring容器中.无论是xml配置还是使用注解 ...
- js面向对象初步探究(上) js面向对象的5种写方法
非常长一段时间看网上大神的JS代码特别吃力.那种面向对象的写法方式让人看得云里来雾里去.于是就研究了一下JS面向对象.因为是初学,就将自己在网上找到的资料整理一下,作为记忆. js面向对象的5种写方法 ...
- POJ 3748:位操作
位操作 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8964 Accepted: 3581 Description 如 ...
- 升级到VS2013常见问题
问题1: Building an MFC project for a non-Unicode character set is deprecated 解决方法: 用于多字节字符编码 (MBCS) 的 ...