热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2017广西邀请赛复盘:NWAFU全国邀请赛训练赛第八场

本次训练赛(NWAFU全国邀请赛复盘之一)基于2017年广西邀请赛的赛题,重点解析了A、E、F、G等关键题目,旨在通过复盘帮助参赛者深入理解相关知识点和技术应用,为后续比赛提供宝贵经验。

训练赛8(NWAFU全国邀请赛复现 - 1(2017广西邀请赛) [Cloned] )

  • 导语
  • 涉及的知识点
  • 题目
    • A
    • E
    • F
    • G
  • 参考文献


导语

邀请赛训练,只能充当无情的翻译机…还是太菜了,选取了队友做出来的题来整理

涉及的知识点

数学、贪心、生成树、前缀后缀和

链接:NWAFU全国邀请赛复现 - 1(2017广西邀请赛) [Cloned]

题目

A

题目大意:给出一个数n,1≤\len≤1018\le 10^{18}1018,求出满足kk≤nk^k\le nkkn的正整数k有多少个

思路:预处理发现161616^{16}1616已经超出了n的范围,所以预处理1~15的结果,对每次输入的N二分查找即可

代码

#include
using namespace std;
typedef unsigned long long ull;
ull data[20],N;
int main() {ios::sync_with_stdio(0),cin.tie(0);for(ull i&#61;1; i<&#61;16; i&#43;&#43;) {ull ans&#61;1;for(ull j&#61;0; j<i; j&#43;&#43;)ans*&#61;i;data[i]&#61;ans;}while(cin >>N) {if(N>&#61;data[15])cout <<15<<endl;elsecout <<upper_bound(data&#43;1,data&#43;16,N)-data-1<<endl;}return 0;
}

E

题目大意&#xff1a;给出一个有n个数的非负整数序列&#xff0c;进行q次查询&#xff0c;每次查询输出去掉一个数之后&#xff0c;剩余所有数的与、或、异或结果

思路&#xff1a;利用前缀和后缀和的思路处理即可&#xff0c;只使用前缀和处理起来会比较麻烦&#xff0c;再使用后缀和提高效率

代码

#include
using namespace std;
int n,q,Ab[121212],Ob[121212],Xb[121212],Aa[121212],Oa[121212],Xa[121212],data[121212];
int main() {while(~scanf("%d%d",&n,&q)) {for(int i&#61;1; i<&#61;n; i&#43;&#43;)scanf("%d",&data[i]);Ab[1]&#61;Ob[1]&#61;Xb[1]&#61;data[1];Aa[n]&#61;Oa[n]&#61;Xa[n]&#61;data[n];for(int i&#61;2; i<&#61;n; i&#43;&#43;) {//前缀和Ab[i]&#61;Ab[i-1]&data[i];Ob[i]&#61;Ob[i-1]|data[i];Xb[i]&#61;Xb[i-1]^data[i];}for(int i&#61;n-1; i>&#61;1; i--) {//后缀和Aa[i]&#61;Aa[i&#43;1]&data[i];Oa[i]&#61;Oa[i&#43;1]|data[i];Xa[i]&#61;Xa[i&#43;1]^data[i];}while(q--) {int t;scanf("%d",&t);if(t!&#61;1&&t!&#61;n)//特判一下printf("%d %d %d\n",Ab[t-1]&Aa[t&#43;1],Ob[t-1]|Oa[t&#43;1],Xb[t-1]^Xa[t&#43;1]);else if(t&#61;&#61;1)printf("%d %d %d\n",Aa[2],Oa[2],Xa[2]);elseprintf("%d %d %d\n",Ab[n-1],Ob[n-1],Xb[n-1]);}}return 0;
}

F

题目大意&#xff1a;给定n个点&#xff0c;m堵墙&#xff0c;给出每个点左边&#xff0c;给出每堵墙的首尾、开销&#xff0c;求出最少拆除多少堵墙&#xff0c;使得整个坐标系的任何地方都能被访问到&#xff08;访问面积无穷&#xff09;&#xff0c;输出最小开销

思路&#xff1a;如图&#xff0c;所需要的便是不存在不能访问到的面积&#xff08;图中的红色地方无法访问&#xff09;&#xff0c;那么&#xff0c;最后的图就不能存在环&#xff0c;因此&#xff0c;考虑一下哪些墙保留之后&#xff0c;不会形成环&#xff0c;而花销又要最小&#xff0c;即求出最大生成树&#xff0c;然后其他的墙都拆掉即可

在这里插入图片描述

代码

#include
using namespace std;
int fa[1212121],n,m;
int seek(int x) {//状态压缩if(fa[x]&#61;&#61;x)return x;return fa[x]&#61;seek(fa[x]);
}
typedef struct node {int x,y,z;bool operator<(node b)const {return z>b.z;}
} node;
node data[1212121];
int main() {while(~scanf("%d%d",&n,&m)) {for(int i&#61;1; i<&#61;n; i&#43;&#43;) {int a,b;scanf("%d%d",&a,&b);fa[i]&#61;i;}int ori&#61;0,cnt&#61;0,sum&#61;0;for(int i&#61;1; i<&#61;m; i&#43;&#43;) {int a,b,c;scanf("%d%d%d",&a,&b,&c);data[i]&#61; {a,b,c};ori&#43;&#61;c;}//记录总共的和sort(data&#43;1,data&#43;1&#43;m);for(int i&#61;1; i<&#61;m; i&#43;&#43;) {//Kruscalint x&#61;seek(data[i].x),y&#61;seek(data[i].y);if(x!&#61;y) {fa[x]&#61;y;sum&#43;&#61;data[i].z;cnt&#43;&#43;;if(cnt&#61;&#61;n-1)//找到n-1条边即可break;}}printf("%d %d\n",m-cnt,ori-sum);//初始值减去计算值}return 0;
}

G

题目大意&#xff1a;给出n张牌&#xff0c;每张牌的点数都是1~n&#xff0c;定义对子为两个相同的牌&#xff0c;定义顺子为三个连续数字的牌&#xff0c;问这n张牌最多能组成对子&#43;顺子个数多少

思路&#xff1a;首先&#xff0c;单从牌数来说&#xff0c;对子肯定比顺子更好&#xff0c;因此先把能出对子的都化为对子&#xff0c;经过这样的操作后&#xff0c;每种点数的牌只剩下0或1张&#xff0c;接下来考虑对子的情况&#xff0c;最好的情况是&#xff0c;剩下三个连续的单张&#xff0c;这样就可以直接凑出一个对子了。当剩下连续两张单张&#xff0c;并且第三个数初始有牌&#xff0c;就可以凑出一个顺子&#xff0c;因为即使把第三个数拆开&#xff0c;少一个对子&#xff0c;但可以多出一个顺子&#xff0c;并且第三个数剩下的个数可能为后面多出一个顺子

代码

#include
using namespace std;
int bucket[1212121],a[1212121],cnt[1212121],n;
//桶&#xff0c;数据&#xff0c;凑成对子的数量
int main() {while(~scanf("%d",&n)) {memset(bucket,0,sizeof(bucket));memset(cnt,0,sizeof(cnt));//清空for(int i&#61;0; i<n; i&#43;&#43;) {scanf("%d",&a[i]);bucket[a[i]]&#43;&#43;;}int ans&#61;0;for(int i&#61;1; i<&#61;n; i&#43;&#43;) {//优先看有没有对子cnt[i]&#61;bucket[i]/2;bucket[i]%&#61;2;}for(int i&#61;1; i<&#61;n-2; i&#43;&#43;)if(bucket[i]&&bucket[i&#43;1]&&(bucket[i&#43;2]||cnt[i&#43;2])) {//判断能不能生成顺子&#xff0c;连续三个数&#xff0c;前两个数量为奇时&#xff0c;此时对换才不亏ans&#43;&#43;;bucket[i]--;bucket[i&#43;1]--;if(bucket[i&#43;2])bucket[i&#43;2]--;else {cnt[i&#43;2]--;bucket[i&#43;2]&#43;&#43;;}}for(int i&#61;1; i<&#61;n; i&#43;&#43;)ans&#43;&#61;cnt[i];printf("%d\n",ans);}return 0;
}

参考文献

  1. HDU6188 (Duizi and Shunzi)[贪心]
  2. HDU - 6187 (最大生成树) 最小生成树
  3. hdu6187 Destroy Walls&#xff08;最大生成树&#xff09;

推荐阅读
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • C++: 实现基于类的四面体体积计算
    本文介绍如何使用C++编程语言,通过定义类和方法来计算由四个三维坐标点构成的四面体体积。文中详细解释了四面体体积的数学公式,并提供了两种不同的实现方式。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 探索1000以内的完美数:因数和等于自身
    本文探讨了如何在1000以内找到所有完美数,即一个数的因数(不包括自身)之和等于该数本身。例如,6是一个完美数,因为1 + 2 + 3 = 6。通过编程实现这一过程,可以更好地理解完美数的特性。 ... [详细]
  • 本文探讨了《魔兽世界》中红蓝两方阵营在备战阶段的策略与实现方法,通过代码展示了双方如何根据资源和兵种特性进行战士生产。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
author-avatar
紫陌
这个世界上真的有天使的存在吗
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有