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)补题相关推荐

  1. 2022“杭电杯”中国大学生算法设计超级联赛(8)

    2022"杭电杯"中国大学生算法设计超级联赛(8) [题目链接](Search Result (hdu.edu.cn)) D Quel'Thalas 题目大意 在二维平面上,[0, ...

  2. 2022“杭电杯”中国大学生算法设计超级联赛(4)

    2022"杭电杯"中国大学生算法设计超级联赛(4) [题目链接](Search Result (hdu.edu.cn)) D Link with Equilateral Trian ...

  3. 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 ...

  4. 2022“杭电杯”中国大学生算法设计超级联赛 (2) 杭电多校第二场

    题目 1001 Static Query on Tree AC代码 1002 C++ to Python AC代码 1003 Copy AC代码 1005 Slayers Come AC代码 1007 ...

  5. 2022“杭电杯”中国大学生算法设计超级联赛(8)题解报告

    Problem D. Quel'Thalas 题解: 手玩一下就会发现答案是就是2n. 代码: #include<iostream> #include<algorithm> # ...

  6. 2022“杭电杯”中国大学生算法设计超级联赛(6)题解报告

    1006.Maex 题意: 给定一棵由从 1 到 n 编号的 n 个顶点组成的有根树,根为顶点 1.顶点 i 有一个自然数权重 ai,并且没有两个不同的顶点具有相同的权重.bu是以u为根的子树的权重的 ...

  7. 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)不变 ...

  8. 2022“杭电杯”中国大学生算法设计超级联赛(8)补题 1011 (持续更新中)

    目录 1011 Stormwind(贪心--分割矩形) 1011 Stormwind(贪心–分割矩形) /*题解:想要切割的次数最多,让原矩形的一边尽可能被多次切割,另一边紧跟即可*/ #includ ...

  9. 2022“杭电杯”中国大学生算法设计超级联赛(1)1003 Backpack个人题解

    Backpack 题目描述 有n件物品,他们各自都有体积vi和价值wi,给你一个体积为m的背包,求是否能从这n件物品中取出若干件,使得它们的体积之和恰好为m,所有物品的异或和最大,最大值是多少 分析 ...

最新文章

  1. 在ubuntu 11.10 64位 上安装adobe flash player
  2. YbtOJ-选点构形【欧拉函数】
  3. jdbc select语句_SELECT语句使用JDBC和Hibernate批量获取
  4. 在 WinCe 平台读写 ini 文件
  5. 智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamMask(2019)
  6. 智能循迹避障小车C语言程序编写思路,基于单片机的智能小车红外避障循迹系统设计与制作...
  7. 公交车上应不应该给老人让座?
  8. [已解决]Eclipse 插件Maven在使用 add dependency,找不到包,解决办法
  9. NSArray 数组
  10. 职场新鲜人必读:那些被“误读”的真经
  11. linux计划任务没有运行,linux下定时任务不能执行
  12. vue 项目中引入字体文件的正确方式~
  13. 计算机毕设 SpringBoot+Vue旧物置换系统 旧物交易管理系统 旧物二手交易系统Java Vue MySQL数据库 远程调试 代码讲解
  14. linux docker运行exe,如何在docker中运行windows
  15. 网页轮显幻灯片 php,图片轮显代码大全(JS幻灯片)
  16. Xshell 6安装和使用教程
  17. 十大开源Web应用安全测试工具
  18. 生活杂谈-简单电器维修知识
  19. 网络信息安全——网络阶段笔记总结--jf
  20. Elasticsearch的使用RestHighLevelClient

热门文章

  1. 模式识别(二)特征矢量与空间
  2. 基于马尔可夫过程的一种新型混合PSO粒子群算法(SCI二区高被引文献)介绍及算法复现(使用chatgpt)
  3. C++Web服务器(一):服务器整体运行流程
  4. C++中的全局变量声明和定义
  5. 编写shell脚本运行python文件
  6. Hadoop 中的数据类型
  7. 汽车鸿蒙音响怎么调,汽车音响怎么调试 汽车音响调试步骤方法【详细介绍】...
  8. 方块填数 “数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于1783年发明的。 如图[1.jpg]所示:6x6的小格被分为6个部分(图中用不同的颜色区分),每个部
  9. Gym - 101485G NWERC2015 G Guessing Camels
  10. 材料科学与工程毕业论文题目【313个】