2018百度之星初赛B - A,D,F
总结:这一次的百度之星之行到这里也就结束了,充分的认识到了自己的不足啊。。。果然还是做的题太少,,见识的题型也还太少,对于STL的掌握还是不够到位啊!!(STL大法是真的好,建议大家认认真真的好好学学),这一次在一群大佬中被狂虐,下来之后还是继续刷题吧,希望明年继续加油!!!(共勉,加油!)
A. degree
度度熊最近似乎在研究图论。给定一个有 NN 个点 (vertex) 以及 MM 条边 (edge) 的无向简单图 (undirected simple graph),此图中保证没有任何圈 (cycle) 存在。
现在你可以对此图依序进行以下的操作:
- 移除至多 KK 条边。
- 在保持此图是没有圈的无向简单图的条件下,自由的添加边至此图中。
请问最后此图中度数 (degree) 最大的点的度数可以多大呢?
输入的第一行有一个正整数 TT,代表接下来有几笔测试资料。
对于每笔测试资料: 第一行有三个整数 NN, MM, KK。 接下来的 MM 行每行有两个整数 aa 及 bb,代表点 aa 及 bb 之间有一条边。 点的编号由 00 开始至 N - 1N−1。
- 0 \le K \le M \le 2 \times 10^50≤K≤M≤2×105
- 1 \le N \le 2 \times 10^51≤N≤2×105
- 0 \le a, b < N0≤a,b<N
- 给定的图保证是没有圈的简单图
- 1 \le T \le 231≤T≤23
- 至多 22 笔测试资料中的 N > 1000N>1000
对于每一笔测试资料,请依序各自在一行内输出一个整数,代表按照规定操作后可能出现的最大度数。
2
3 1 1
1 2
8 6 0
1 2
3 1
5 6
4 1
6 4
7 0
2
4 思路:以当前度最多的点为计算点,设当前最多的度为a,判断当前的孤立节点 cnt 有多少个即可以直接加入结果!
其次看与该点不相连的边 b 有几条;因为去掉与之不相连的k条边即可以加上k个度,不过此处去掉的边有一定
的上限limit = ( m - a );所以ans = a + cnt + min ( k , limit ).
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<set>
using namespace std;
const int maxn = 2e5 + ;
vector<int>e[maxn];
int n, m, k, T;
int x[maxn], cnt, vis[maxn];
void dfs(int s)
{
for (int i = ; i<e[s].size(); i++) {
if (!vis[e[s][i]]) {
vis[e[s][i]] = cnt;
dfs(e[s][i]);
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin >> T;
while (T--) {
for (int i = ; i <= n; i++)
e[i].clear();
memset(vis, , sizeof(vis));
memset(x, , sizeof(x));
cin >> n >> m >> k;
int a, b;
for (int i = ; i<m; i++) {
cin >> a >> b;
a++, b++;
x[a]++; x[b]++;
e[a].push_back(b);
e[b].push_back(a);
}
cnt = ; int ma = ;
for (int i = ; i <= n; i++) {
if (ma<x[i])ma = x[i];
if (!vis[i]) {
dfs(i);
cnt++;
}
}
cnt--;//当前的联通块数量
int count = m - ma;//代表最多可以删除多少条边
cnt -= ;//除了那一块度最多的之外的联通快数量
int ans = cnt + min(count, k) + ma;//答案等于孤立点的数量+当前的度数+最多可以去掉几条边(即可以再加入几条边)
cout << ans << endl;
}
return ;
}
D.p1m2
度度熊很喜欢数组!!
我们称一个整数数组为稳定的,若且唯若其同时符合以下两个条件:
- 数组里面的元素都是非负整数。
- 数组里面最大的元素跟最小的元素的差值不超过 11。
举例而言,[1, 2, 1, 2][1,2,1,2] 是稳定的,而 [-1, 0, -1][−1,0,−1] 跟 [1, 2, 3][1,2,3] 都不是。
现在,定义一个在整数数组进行的操作:
- 选择数组中两个不同的元素 aa 以及 bb,将 aa 减去 22,以及将 bb 加上 11。
举例而言,[1, 2, 3][1,2,3] 经过一次操作后,有可能变为 [-1, 2, 4][−1,2,4] 或 [2, 2, 1][2,2,1]。
现在给定一个整数数组,在任意进行操作后,请问在所有可能达到的稳定数组中,拥有最大的『数组中的最小值』的那些数组,此值是多少呢?
输入的第一行有一个正整数 TT,代表接下来有几组测试数据。
对于每组测试数据: 第一行有一个正整数 NN。 接下来的一行有 NN 个非负整数 x_ixi,代表给定的数组。
- 1 \le N \le 3 \times 10^51≤N≤3×105
- 0 \le x_i \le 10^80≤xi≤108
- 1 \le T \le 181≤T≤18
- 至多 11 组测试数据中的 N > 30000N>30000
对于每一组测试数据,请依序各自在一行内输出一个整数,代表可能到达的平衡状态中最大的『数组中的最小值』,如果无法达成平衡状态,则输出 -1−1。
2
3
1 2 4
2
0 100000000
2
33333333 思路:二分,直接对这个最大值二分,对每一次二分的结果,统计原数组中比之大的数中能够减去的2的个数f2 与比之小能加的1的个数f1,若f2>=f1则代表此结果是成立的,可以往大递归;
(至于为什么是成立的可以动手模拟一下)否则必须往小递归,最后输出结果即可.(由于题目说每个xi都是大于等于零,所以对于每组数据必定会存在一个解)
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int maxn = 3e5 + ;
LL n, T, a[maxn];
bool Find(LL x)
{
LL t = , k = ;
for (int i = ; i <= n; i++) {
if (a[i] <= x)t -= (x - a[i]);
else t += (a[i] - x) / ;
}
if (t>=)return true;
return false;
}
int main()
{
ios::sync_with_stdio(false);
cin >> T;
while (T--) {
cin >> n;
LL l = , r = ;
for (int i = ; i <= n; i++) {
cin >> a[i]; r = max(r, a[i]);
}
while (l <= r) {
LL mid = (l + r) >> ;
if (Find(mid))l = mid + ;
else r = mid - ;
}
cout << r << endl;
}
return ;
}
F.rect
度度熊有一个大小为 MX \times MYMX×MY 的矩形,左下角坐标为 (0, 0)(0,0),右上角坐标为 (MX, MY)(MX,MY)。此矩形内有 NN 个整数坐标的点 (x_i, y_i)(xi,yi),x_ixi 彼此不重复,y_iyi 彼此也不重复。
现在要从每一个点画出一条线段,满足下列条件:
- 线段起点为坐标点,终点在矩形范围的四个边界之一上。
- 线段彼此不能交叉。
现在要让画出的线段的长度总和最小,请输出这个最小的长度总和值。
输入的第一行有一个正整数 TT,代表接下来有几笔测试资料。
对于每笔测试资料: 第一行有三个整数 MXMX, MYMY 以及 NN。 接下来的 NN 行每行有两个正整数 x_ixi 及 y_iyi。
- 2 \le MX, MY \le 10^62≤MX,MY≤106
- 0 \le N \le 10^50≤N≤105
- 如果 i \ne ji≠j,则保证 x_i \ne x_jxi≠xj 及 y_i \ne y_jyi≠yj
- 0 < x_i < MX0<xi<MX
- 0 < y_i < MY0<yi<MY
- 1 \le T \le 201≤T≤20
- 至多 22 笔测试资料中的 N > 1000N>1000
对于每一笔测试资料,请依序各自在一行内输出一个整数,代表可能的最小长度和。
2
4 4 1
2 2
10 7 3
6 3
2 6
9 5
2
5
思路:由于题目上说对于每个点(xi,yi),xi,yi都不重复出现,也就代表着如果对于每个点直接找它离边界最近的直线距离即可满足不相交的条件。
#include<iostream>
#include<algorithm>
#include<cmath> using namespace std;
long long T, n, x, y;
int main()
{
ios::sync_with_stdio(false);
cin >> T;
while (T--) {
cin >> x >> y >> n;
long long ans = , a, b;
for (int i = ; i<n; i++) {
cin >> a >> b;
ans += min(min(abs(a - ), abs(x - a)), min(abs(b - ), abs(y - b)));
}
cout << ans << endl;
}
return ;
}
2018百度之星初赛B - A,D,F的更多相关文章
- 2018百度之星初赛(A)2 度度熊学队列
思路: 记录一下c++ stl中的双向链表list的各种用法. https://blog.csdn.net/fanyun_01/article/details/56881515 实现: #includ ...
- 2018 百度之星 初赛 第六题 HDU6349
三原色图 Accepts: 281 Submissions: 1261 Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 262144/ ...
- 【2018百度之星初赛 B】1001并查集 1004二分 1006不等式
1001 degree 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6380 并查集向图中加点,分别记录与初始度数最多的点 直接相连的点数.独立的点数 ...
- 【2018百度之星初赛(A)】1002 度度熊学队列
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6375 Knowledge Point: STL - map:https://www.cnblogs.c ...
- 2018百度之星初赛B轮 p1m2
p1m2 Accepts: 954 Submissions: 4063 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/1310 ...
- 2018百度之星初赛B轮 rect
rect Accepts: 1654 Submissions: 2948 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131 ...
- 2018百度之星初赛A轮 度度熊拼三角
#include<bits/stdc++.h> using namespace std; int n; int a[1005]; int main() { int ans; ...
- 2018百度之星初赛A轮 度度熊学队列
注意:刚开始用数组存deque<int> qa[MAX]会爆内存 需要改用map<int, deque<int> > qa优化 不明觉厉 #include<b ...
- HDU6383 2018 “百度之星”程序设计大赛 - 初赛(B) 1004-p1m2 (二分)
原题地址 p1m2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
随机推荐
- IDEA:将WEB-INF\lib下的Jar包添加到项目中
打开Project Structure[可以使用快捷键:Ctrl+Alt+Shift+S] 左侧选中Modules,在Dependecies中,点击右侧"+"号,选择JARS or ...
- jquery 回车提交事件
$("body").keydown(function(){ if(event.keyCode == "13"){ //13是回车键的位置 } })
- 【JZOJ4887】【NOIP2016提高A组集训第13场11.11】最大匹配
题目描述 mhy12345学习了二分图匹配,二分图是一种特殊的图,其中的点可以分到两个集合中,使得相同的集合中的点两两没有连边. 图的"匹配"是指这个图的一个边集,里面的边两两不存 ...
- [Java]ssh网上商城总结 标签: hibernatessh 2016-05-15 21:03 1099人阅读 评论(32)
前几日敲完了ssh网上商城,虽然现在已经敲完了整个系统,却发现自己对于ssh,了解的一点都不多,什么是struts2,什么是spring,什么是hibernate,自己都是稀里糊涂,然后看了一下后面的 ...
- 2016 Asia Jakarta Regional Contest J - Super Sum UVALive - 7720 【快速幂+逆元】
J-Super Sum 题目大意就是给定N个三元组<a,b,c>求Σ(a1^k1*a2^k2*...*ai^ki*..an^kn)(bi<=ki<=ci) 唉.其实题目本身不难 ...
- OpenCV 新手教程 之环境配置 + 图片匹配 matchTemplate
1.什么是OpenCV OpenCV的全称是:Open Source Computer Vision Library. OpenCV是一个基于(开源)发行的跨平台计算机视觉库,能够执行在Linux.W ...
- qt painter多个点的曲线
plot.h #ifndef PLOT_H #define PLOT_H #include<QTimer> #include <QWidget> class pathplot ...
- Laravel的请求声明周期
声明周期概述# 开始# public/index.php 文件是所有对Laravel应用程序的请求的入口点.而所有的请求都是经由你的Web服务器(Apache/Nginx) 通过配置引导到这个文件.i ...
- 上传图片如何对图片进行压缩canvas
前言:哈喽,朋友们,最近一直在马不停蹄地赶项目,很久没有写博客了.今天我们来看一下前端上传图片地时候如何对图片进行压缩 1.图片上传 我近期写项目都是使用的VUE,这里上传图片使用了Element-u ...
- oracle函数 TRANSLATE(c1,c2,c3)
[功能]将字符表达式值中,指定字符替换为新字符 [说明]多字节符(汉字.全角符等),按1个字符计算 [参数] c1 希望被替换的字符或变量 c2 查询原始的字符集 c3 替换新的字符集,将 ...