总结:这一次的百度之星之行到这里也就结束了,充分的认识到了自己的不足啊。。。果然还是做的题太少,,见识的题型也还太少,对于STL的掌握还是不够到位啊!!(STL大法是真的好,建议大家认认真真的好好学学),这一次在一群大佬中被狂虐,下来之后还是继续刷题吧,希望明年继续加油!!!(共勉,加油!)

A. degree

Problem Description

度度熊最近似乎在研究图论。给定一个有 NN 个点 (vertex) 以及 MM 条边 (edge) 的无向简单图 (undirected simple graph),此图中保证没有任何圈 (cycle) 存在。

现在你可以对此图依序进行以下的操作:

  1. 移除至多 KK 条边。
  2. 在保持此图是没有圈的无向简单图的条件下,自由的添加边至此图中。

请问最后此图中度数 (degree) 最大的点的度数可以多大呢?

Input

输入的第一行有一个正整数 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×10​5​​
  • 1 \le N \le 2 \times 10^51≤N≤2×10​5​​
  • 0 \le a, b < N0≤a,b<N
  • 给定的图保证是没有圈的简单图
  • 1 \le T \le 231≤T≤23
  • 至多 22 笔测试资料中的 N > 1000N>1000
Output

对于每一笔测试资料,请依序各自在一行内输出一个整数,代表按照规定操作后可能出现的最大度数。

Sample Input
2
3 1 1
1 2
8 6 0
1 2
3 1
5 6
4 1
6 4
7 0
Sample Output
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

Problem Description

度度熊很喜欢数组!!

我们称一个整数数组为稳定的,若且唯若其同时符合以下两个条件:

  1. 数组里面的元素都是非负整数。
  2. 数组里面最大的元素跟最小的元素的差值不超过 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]。

现在给定一个整数数组,在任意进行操作后,请问在所有可能达到的稳定数组中,拥有最大的『数组中的最小值』的那些数组,此值是多少呢?

Input

输入的第一行有一个正整数 TT,代表接下来有几组测试数据。

对于每组测试数据: 第一行有一个正整数 NN。 接下来的一行有 NN 个非负整数 x_ix​i​​,代表给定的数组。

  • 1 \le N \le 3 \times 10^51≤N≤3×10​5​​
  • 0 \le x_i \le 10^80≤x​i​​≤10​8​​
  • 1 \le T \le 181≤T≤18
  • 至多 11 组测试数据中的 N > 30000N>30000
Output

对于每一组测试数据,请依序各自在一行内输出一个整数,代表可能到达的平衡状态中最大的『数组中的最小值』,如果无法达成平衡状态,则输出 -1−1。

Sample Input
2
3
1 2 4
2
0 100000000
Sample Output
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

Problem Description

度度熊有一个大小为 MX \times MYMX×MY 的矩形,左下角坐标为 (0, 0)(0,0),右上角坐标为 (MX, MY)(MX,MY)。此矩形内有 NN 个整数坐标的点 (x_i, y_i)(x​i​​,y​i​​),x_ix​i​​ 彼此不重复,y_iy​i​​ 彼此也不重复。

现在要从每一个点画出一条线段,满足下列条件:

  • 线段起点为坐标点,终点在矩形范围的四个边界之一上。
  • 线段彼此不能交叉。

现在要让画出的线段的长度总和最小,请输出这个最小的长度总和值。

Input

输入的第一行有一个正整数 TT,代表接下来有几笔测试资料。

对于每笔测试资料: 第一行有三个整数 MXMX, MYMY 以及 NN。 接下来的 NN 行每行有两个正整数 x_ix​i​​ 及 y_iy​i​​。

  • 2 \le MX, MY \le 10^62≤MX,MY≤10​6​​
  • 0 \le N \le 10^50≤N≤10​5​​
  • 如果 i \ne ji≠j,则保证 x_i \ne x_jx​i​​≠x​j​​ 及 y_i \ne y_jy​i​​≠y​j​​
  • 0 < x_i < MX0<x​i​​<MX
  • 0 < y_i < MY0<y​i​​<MY
  • 1 \le T \le 201≤T≤20
  • 至多 22 笔测试资料中的 N > 1000N>1000
Output

对于每一笔测试资料,请依序各自在一行内输出一个整数,代表可能的最小长度和。

Sample Input
2
4 4 1
2 2
10 7 3
6 3
2 6
9 5
Sample Output
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的更多相关文章

  1. 2018百度之星初赛(A)2 度度熊学队列

    思路: 记录一下c++ stl中的双向链表list的各种用法. https://blog.csdn.net/fanyun_01/article/details/56881515 实现: #includ ...

  2. 2018 百度之星 初赛 第六题 HDU6349

    三原色图  Accepts: 281  Submissions: 1261  Time Limit: 1500/1000 MS (Java/Others)  Memory Limit: 262144/ ...

  3. 【2018百度之星初赛 B】1001并查集 1004二分 1006不等式

    1001 degree 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6380 并查集向图中加点,分别记录与初始度数最多的点 直接相连的点数.独立的点数 ...

  4. 【2018百度之星初赛(A)】1002 度度熊学队列

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6375 Knowledge Point: STL - map:https://www.cnblogs.c ...

  5. 2018百度之星初赛B轮 p1m2

    p1m2 Accepts: 954 Submissions: 4063 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/1310 ...

  6. 2018百度之星初赛B轮 rect

    rect Accepts: 1654 Submissions: 2948 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131 ...

  7. 2018百度之星初赛A轮 度度熊拼三角

    #include<bits/stdc++.h> using namespace std; int n; int a[1005]; int main() {     int ans;     ...

  8. 2018百度之星初赛A轮 度度熊学队列

    注意:刚开始用数组存deque<int> qa[MAX]会爆内存 需要改用map<int, deque<int> > qa优化 不明觉厉 #include<b ...

  9. HDU6383 2018 “百度之星”程序设计大赛 - 初赛(B) 1004-p1m2 (二分)

    原题地址 p1m2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

随机推荐

  1. Directx11教程(3) 一个最基本D3D应用程序(1)

    原文:Directx11教程(3) 一个最基本D3D应用程序(1)       在前一篇教程程序代码的基础上,这次我们将增加2个类: InputClass,键盘处理的代码将放在这个类里面,Graphi ...

  2. Python中if __name__ == '__main__':理解

    在很多python脚本中在最后的部分会执行一个判断语句if __name__ == "__main__:",之后还可能会有一些执行语句.那添加这个判断的目的何在? 在python编 ...

  3. MUI - 基于plus.downloader的图片懒加载功能,支持本地缓存

    基于plus.downloader的图片懒加载功能,支持本地缓存 简单说一下 在app中,对一些变动不频繁的图片数据(如个人头像等),是需要存储在本地的.我相信这对大多数的app都是强需求的. 怎么使 ...

  4. Minimum Depth of Binary Tree最短深度

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  5. bzoj1614 架设电话线

    Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...

  6. VirtualBox使用随笔

    1.virtualbox配置Android手机USB热点 host:Windows10;guest:windows XP/10 右击我的电脑 - 管理 - 设备管理器 - 网卡适配器,若手机正确vb连 ...

  7. 【NS2】How to remove Cygwin completely from Windows

    How to remove Cygwin completely from Windows 9th September 2012. 31243 views. Software Remember need ...

  8. python 空值(NoneType)

  9. Java练习 SDUT-1959_简单枚举类型——植物与颜色

    简单枚举类型--植物与颜色 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 请定义具有red, orange, yell ...

  10. @codeforces - 1056G@ Take Metro

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 环上有 n 个点,按顺时针顺序以 1 到 n 编号.其中 1~m ...