总结:这一次的百度之星之行到这里也就结束了,充分的认识到了自己的不足啊。。。果然还是做的题太少,,见识的题型也还太少,对于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. 一键制作启动elasticsearch和kibana启动的脚本可执行程序

    1.测试环境 测试环境: . windows10专业版 . elasticsearch6.5.4 . kibana6.5.4 2.启动的脚本run.py import os import time i ...

  2. 七.Deque的应用案例-回文检查

    - 回文检测:设计程序,检测一个字符串是否为回文. - 回文:回文是一个字符串,读取首尾相同的字符,例如,radar toot madam. - 分析:该问题的解决方案将使用 deque 来存储字符串 ...

  3. SSM框架用JSON进行前后端数据传输

    一个根据用户id查找用户信息的简单功能,使用JSON进行数据的传输 前端代码 这里用bootstrap做简单的样式美化,中间留了个div用来异步的显示查询结果,ajax进行前端的数据传输(class内 ...

  4. 洛谷 P1119 灾后重建 最短路+Floyd算法

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1119 灾后重建 题目描述 B地区在地震过后,所有村 ...

  5. LeetCode153 Find Minimum in Rotated Sorted Array. LeetCode162 Find Peak Element

    二分法相关 153. Find Minimum in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unkn ...

  6. 2017校赛 问题 D: 我知道了,你知道了吗?【递归】

    题目描述 Alice和Bob走在去学校的路上,听到两个路人的对话: 路人甲:我知道了, 你知道了吗? 路人乙:我知道你知道了,你知道了吗? 路人甲:我知道你知道我知道了,你知道了吗? 路人乙:我知道你 ...

  7. jsp项目中整个项目没有问题但是servlet报错

    项目没问题但是serverlet报错 项目右键 buildPath-->configure build path -->Myeclipse Library-->J2EE 1.3 Li ...

  8. KiCad EDA 镜像目录说明

    KiCad EDA 镜像目录说明 stable/ -- 稳定版安装包. testing/ -- 测试安装包. nightly/ -- 每日编译安装包. 5.1 版本的每日编译包,这个文件夹是重点,如果 ...

  9. js全局方法

    1.eval() 参数:string要计算的表达式或要执行的语句 返回值:计算结果或者执行结果 使用方法: (1)eval("2+2")返回值:4 (2)eval("x= ...

  10. 【uml】之类图中的关系 标签: uml图形类 2014-11-29 09:02 1198人阅读 评论(23)

    uml早就画完了图,但是自己迟迟没有总结,因为总觉的自己把握的不到位,虽然现在也还是不到位,废话少说,上篇博客总结了用例图中的几种关系,这篇就讨论一下类图中的几种关系. 在uml的所有图中,就我目前的 ...