[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)暴力枚举发现把 ...
随机推荐
- C# 泛基
1 你有时候希望在父类规定一些行为,让子类无法修改,但是这些实现是依赖一个子类才能获取的值,你又不可能知道所有的子类 ,没办法替它在父类里面初始化,这时候就需要在父类里面定义一个每个子类一个的,但又是 ...
- [如何在mac下使用gulp] 2. gulp模块的常用方法
常用的gulp模块方法有: gulp.src() gulp.src('client/one.js'); //指定明确的要处理文件 gulp.src('client/*.js'); //处理client ...
- Linux文件、目录属性
文件.目录属性 可能有人觉得,文件这东西这么普通有什么好讲的,,,其实不然,在linux中一切皆文件,搞清楚文件的本质,将对我们大有裨益. 文件.目录属性简介 举个例子 randolf@localho ...
- 【tips】ORM - SQLAlchemy操作MySQL数据库
优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...
- AIM Tech Round (Div. 2)——ABCD
http://codeforces.com/contest/624 A.python是用来写div2的AB题的... a, b, x, y = map(float, raw_input().split ...
- ACDream - Xor pairs
先上题目: Xor pairs Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Sub ...
- CODEVS——T 1036 商务旅行
http://codevs.cn/problem/1036/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Descript ...
- [转]十五天精通WCF——第四天 你一定要明白的通信单元Message
转眼你已经学了三天的wcf了,是不是很好奇wcf在传输层上面到底传递的是个什么鸟毛东西呢???应该有人知道是soap,那soap这叼毛长得是什么 样呢?这一篇我们来揭开答案... 一:soap到底长成 ...
- QueryString 地址栏参数
MXS&Vincene ─╄OvЁ &0000002 ─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...
- C语言编程入门——程序练习(上)
大家能够敲写一下以下的练习代码.看下执行结果,都非常easy.关键要理解. if: # include <stdio.h> int main(void) { int i = 1; i = ...