2022“杭电杯”中国大学生算法设计超级联赛(8)补题
1004 Quel'Thalas
题意
在二维平面上,点在坐标在[0,n]的区间内,通过添加无限长的直线可以覆盖这些点,在不覆盖(0,0)的情况下要添加多少根直线。
思路
在两个方向上添加直线,所以是2*n。
代码
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <deque>
#include <stdio.h>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <iomanip>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define int long long
using namespace std;signed main()
{IOS;int t;cin>>t;int n;while(t--){cin>>n;cout<<n+n<<endl;} return 0;
}
1001 Theramore
题意
部落的战舰可以描述为一个字符串s,它只包含“0”和“1”,分别表示小型战舰和大型战舰。吉安娜可以对绳子表演一些魔术。在一个魔术中,她选择一个任意长度为奇数的战舰,并将其反转。吉安娜可以随心所欲地表演这个魔法。吉安娜希望小型战舰在最前面,因为它们更容易被摧毁。她请求你的帮助,你需要告诉她她能得到的最小的字符串。
思路
因为改变前后,奇数位的数字仍然在奇数位,偶数位的数字仍然在偶数位,所以可以分别统计奇数位数字和偶数位数字,分别按从小到大顺序排序后,在偶数位奇数位交替输出。
代码
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <deque>
#include <stdio.h>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <iomanip>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define int long long
using namespace std;signed main()
{IOS;int t;cin>>t;char s[100005];char ji[100005];char ou[100005];int i,j;int n;int o;while(t--){cin>>s;n=strlen(s);o=0;j=0;for(i=0;i<n;i++){if(i%2==0){ou[o]=s[i];o++;}else{ji[j]=s[i];j++;}}sort(ou,ou+o);sort(ji,ji+j);o=0;j=0;for(i=0;i<n;i++){if(i%2==0){s[i]=ou[o];o++;}else{s[i]=ji[j];j++;}}cout<<s<<endl;} return 0;
}
1011 Stormwind
题意
瓦里安·乌瑞恩在战斗中获得了一块长方形的金子,长n,宽m。现在他想在金子上画一些线,这样以后他就可以沿着线切割金子了。他画的线应该满足以下要求: 1.这些线的端点应该在黄金的边界上。 2.线条应该至少平行于黄金的一个边界。 3.沿着所有的线切割后,每块金都是一个长宽都是整数的长方形。 4.沿着所有的线切割后,每块金块的面积至少应该是k。 5.两条线不应有一个以上的共同点。瓦里安·乌瑞恩想以最大化他所画线条的方式切割黄金。 作为联盟的最高国王,他当然没有时间做这些。所以他找到了你!请帮他切黄金!
思路
ceil函数是求大于该数的最小整数。
通过在m上枚举小长方形的一条边i,用ceil(k/i)计算它的另一条的边长,如果另一条边大于n的话,此划分方法行不通;如果不大于的话,此划分方法可以,再计算两个方向一共划分了多少条线,求出最大值。
代码
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <deque>
#include <stdio.h>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <iomanip>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define int long long
using namespace std;signed main()
{IOS;int t;cin>>t;int n,m,k;int i,j;int sum;while(t--){cin>>n>>m>>k;sum=0;for(i=1;i<=m;i++){j=ceil((k*1.0)/i);if(j>n)continue;sum=max(sum,(m/i-1)+(n/j-1));}cout<<sum<<endl;}return 0;
}
1008 Orgrimmar
题意
无向图的分离集是这样的一组顶点,如果我们只保留这些顶点之间的边,则集合中的每个顶点至多连接一条边。 解离集的大小就是顶点数。图的最大分离集由具有最大尺寸的图的分离集定义。 Sylvanas有一个有n个顶点和n-1条边的连通无向图,她想找出该图的最大离解集的大小。由于她刚刚成为部落的酋长,她太忙了,无法解决这个问题。 请帮助她这样做。
即从树中选取x个点,使这些点的度数小于等于1,求x的最大值。
思路
树形dp。采用dp[n][3]来计算。
其中dp[i][0]表示以i为根节点的子树中,不选i,满足题意的数目;
dp[i][1]表示以i为根节点的子树中,选择i,但不选子结点,满足题意的数目;
dp[i][2]表示以i为根节点的子树中,选择i,再选择一个子结点,满足题意的数目。
状态转移过程:
dp[i][0]:不选根节点,所以子结点每种情况都有可能,直接求解dp[j][0],dp[j][1],dp[j][2]的最大值,而dp[i][0]是它们的总和;
dp[i][1]:不选子结点,所以直接求解dp[j][0],而dp[i][1]是它们的总和再加上自己;
dp[i][2]:都选,子结点只能选一个,在它自己的基础上,再加上它所有子结点构成的子树中不选自己的部分即dp[j][0],再计算出哪一个结点的选它本身和不选它本身相差最多的结点,通过dp[j][1]-dp[j][0]再与前边的结合,即为选j子结点的情况。
每一个结点都要遍历到,不论它是处于什么情况下,不论它作为根节点选不选自己,作为子结点选不选自己都要计算时加入,这就要求对于每一个结点都要进行预处理,预处理时只思考该节点情况,不考虑它的父结点和子结点,所以dp[i][0]不选自己,为0;其他两种选择自己,为1 。
代码
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <deque>
#include <stdio.h>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <iomanip>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define int long long
using namespace std;
const int N=500005;
int head[N],to[N*10],nxt[N*10],cnt;
int dp[N][3];
void add(int u,int v)
{to[cnt]=v;nxt[cnt]=head[u];head[u]=cnt++;
}
void dfs(int x,int fa)
{dp[x][0]=0;dp[x][1]=dp[x][2]=1;int cha=-0x3f3f3f3f;for(int i=head[x];i!=-1;i=nxt[i]){int j=to[i];if(j==fa)continue;dfs(j,x);dp[x][0]+=max(dp[j][0],max(dp[j][1],dp[j][2]));dp[x][1]+=dp[j][0];dp[x][2]+=dp[j][0];cha=max(cha,dp[j][1]-dp[j][0]);}dp[x][2]+=cha;
}
signed main()
{int size(512<<20); // 512M__asm__ ( "movq %0, %%rsp\n"::"r"((char*)malloc(size)+size));IOS;int t;cin>>t;int n;int i,j;int sum;int u,v;while(t--){cin>>n;cnt=0;for(i=1;i<=n;i++)head[i]=-1;for(i=1;i<n;i++){cin>>u>>v;add(u,v);add(v,u);}dfs(1,-1);cout<<max(dp[1][0],max(dp[1][1],dp[1][2]))<<endl;}exit(0);}
2022“杭电杯”中国大学生算法设计超级联赛(8)补题相关推荐
- 2022“杭电杯”中国大学生算法设计超级联赛(8)
2022"杭电杯"中国大学生算法设计超级联赛(8) [题目链接](Search Result (hdu.edu.cn)) D Quel'Thalas 题目大意 在二维平面上,[0, ...
- 2022“杭电杯”中国大学生算法设计超级联赛(4)
2022"杭电杯"中国大学生算法设计超级联赛(4) [题目链接](Search Result (hdu.edu.cn)) D Link with Equilateral Trian ...
- 2022“杭电杯”中国大学生算法设计超级联赛 (1) 杭电多校第一场 2 3 4 5 8 12
题目 1002 Dragon slayer 标程 1003 Backpack AC代码 1004 Ball AC代码 1008 Path AC代码 1009 Laser AC代码 1012 Alice ...
- 2022“杭电杯”中国大学生算法设计超级联赛 (2) 杭电多校第二场
题目 1001 Static Query on Tree AC代码 1002 C++ to Python AC代码 1003 Copy AC代码 1005 Slayers Come AC代码 1007 ...
- 2022“杭电杯”中国大学生算法设计超级联赛(8)题解报告
Problem D. Quel'Thalas 题解: 手玩一下就会发现答案是就是2n. 代码: #include<iostream> #include<algorithm> # ...
- 2022“杭电杯”中国大学生算法设计超级联赛(6)题解报告
1006.Maex 题意: 给定一棵由从 1 到 n 编号的 n 个顶点组成的有根树,根为顶点 1.顶点 i 有一个自然数权重 ai,并且没有两个不同的顶点具有相同的权重.bu是以u为根的子树的权重的 ...
- 2022“杭电杯”中国大学生算法设计超级联赛(2)1003.Copy
样例输入: 1 5 3 1 2 3 4 5 2 4 1 2 4 2 5 样例输出: 6 题意: 有q次操作,有以下两种: 1.选择区间[l,r],复制[l,r]追加到r后,总的数组的大小(n)不变 ...
- 2022“杭电杯”中国大学生算法设计超级联赛(8)补题 1011 (持续更新中)
目录 1011 Stormwind(贪心--分割矩形) 1011 Stormwind(贪心–分割矩形) /*题解:想要切割的次数最多,让原矩形的一边尽可能被多次切割,另一边紧跟即可*/ #includ ...
- 2022“杭电杯”中国大学生算法设计超级联赛(1)1003 Backpack个人题解
Backpack 题目描述 有n件物品,他们各自都有体积vi和价值wi,给你一个体积为m的背包,求是否能从这n件物品中取出若干件,使得它们的体积之和恰好为m,所有物品的异或和最大,最大值是多少 分析 ...
最新文章
- 在ubuntu 11.10 64位 上安装adobe flash player
- YbtOJ-选点构形【欧拉函数】
- jdbc select语句_SELECT语句使用JDBC和Hibernate批量获取
- 在 WinCe 平台读写 ini 文件
- 智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamMask(2019)
- 智能循迹避障小车C语言程序编写思路,基于单片机的智能小车红外避障循迹系统设计与制作...
- 公交车上应不应该给老人让座?
- [已解决]Eclipse 插件Maven在使用 add dependency,找不到包,解决办法
- NSArray	数组
- 职场新鲜人必读:那些被“误读”的真经
- linux计划任务没有运行,linux下定时任务不能执行
- vue 项目中引入字体文件的正确方式~
- 计算机毕设 SpringBoot+Vue旧物置换系统 旧物交易管理系统 旧物二手交易系统Java Vue MySQL数据库 远程调试 代码讲解
- linux docker运行exe,如何在docker中运行windows
- 网页轮显幻灯片 php,图片轮显代码大全(JS幻灯片)
- Xshell 6安装和使用教程
- 十大开源Web应用安全测试工具
- 生活杂谈-简单电器维修知识
- 网络信息安全——网络阶段笔记总结--jf
- Elasticsearch的使用RestHighLevelClient
热门文章
- 模式识别(二)特征矢量与空间
- 基于马尔可夫过程的一种新型混合PSO粒子群算法(SCI二区高被引文献)介绍及算法复现(使用chatgpt)
- C++Web服务器(一):服务器整体运行流程
- C++中的全局变量声明和定义
- 编写shell脚本运行python文件
- Hadoop 中的数据类型
- 汽车鸿蒙音响怎么调,汽车音响怎么调试 汽车音响调试步骤方法【详细介绍】...
- 方块填数 “数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于1783年发明的。 如图[1.jpg]所示:6x6的小格被分为6个部分(图中用不同的颜色区分),每个部
- Gym - 101485G NWERC2015 G Guessing Camels
- 材料科学与工程毕业论文题目【313个】