地址:acmore.net/web/showProblem?id=1250第四次圣杯战争开始了,比如,第一份灵体的视野范围是[-1, 1],第二份灵体
比赛不知道哪个细节写搓了,fuck
传送门:点击打开链接题意:有一个矩形区域被划分为N行M列的网格,每个格子里有一定数量的资源并记录在矩阵val中,坐标(x,y)位置上资源量为val[x][y],其val中每个元素的值为0~9的整数。如果你在某个网格(a,b)上造一座保护塔,那么你可以占领K个网格中的资源,这K个格子分别是(a+dx[1],b+dy[1]),(a+dx[2],b+dy[2]),...,(a+dx[K],b+dy[
传送门:点击打开链接题意:化简多项式。思路:先写个结构体,把多项式的乘法和加法重载好。然后直接套后缀表达式啊,或者表达式树啊,或者用栈写表达式解析啊,都是随意的下面这个是表达式树的写法。有一个要注意的地方是,在函数里面开数组,也是属于栈的空间,所以用G++提交的时候,要注意一下扩栈。#include #include #include #include #inclu
传送门:点击打开链接题意:输入n,m,x,刚开始有一个1~n的排列,然后定义了一种操作,是将数组中的偶数位数字选出来,按照顺序放到数组最前面,奇数位按照顺序放到偶数位的后面,进行m次这样的操作,输出之后前x个数字思路:找到循环节T,利用T去约m,然后再将很小的m拿去模拟,输出前x个一开始就想到找循环节,,刚开始只想到去用找规律的方法去找到通项公式,但是找了好久就是没找到,虽然感觉理论上
传送门:点击打开链接题意:对于n个点围成的圈。从一个点出发,顺时针数K个位置,一直进行这个操作直到回到最初的那个点时,恰好把所有的点都访问了一遍,问最大的K(K思路:很容易就想到了一种方法,找到K后来发现其实是有规律的,从n=3一直算下去,会得到一个这样的序列1 1 2 1 3 3 4 3 5 5 6 5 7 7 8 7 9 9 10 9.....很明显以4个为一组,一下子就能找到
传送门:点击打开链接题意:输入一个x,要求找到一对a和b,使得a和b能组成所有>x的数字,却不能组成等于x的数字思路:一道非常让人无语的构造题,如果想到了就会觉得特别蠢。。如果a等于2,那么b就一定要是奇数才行。然后想到不能等于x,如果bx的奇数,来当作b此时因为a是2,所以和b组合在一起,就能表示出所有>=b的数字了,,没错,,做完了 T^T#include#include
传送门:点击打开链接题意:一颗完全二叉树,表示辈分关系,节点从0开始。随便告诉你两个节点,问v节点是u节点的什么关系。思路:顶级模拟题!感谢这道题目,我终于搞懂了各种头衔的含义。。思路大概是先求出u和v到lca的距离,然后就利用这个距离去讨论。刚开始可以写一部分出来,发现规律后就可以直接按规律来写了。#include #include #include #include
传送门:点击打开链接题意:每一个正整数都可以表示为若干个斐波那契数的和,一个整数可能存在多种不同的表示方法,例如:14 = 13 + 1 = 8 + 5 + 1,其中13 + 1是最短的表示(只用了2个斐波那契数)。定义F(n) = n的最短表示中的数字个数,F(14) = 2,F(100) = 3(100 = 3 + 8 + 89),F(16) = 2(16 = 8 + 8 = 13 + 3
传送门:点击打开链接题意:n个数,m次查询。n每次查询为一个区间l,r,要在n的数的[l,r]区间内选出2个数a,b(a思路:标准答案好像是莫队算法+trie不过好多人复杂度都是O(n(n+m))的,,Tourist也是。。只要你敢写就能过。大概就是i枚举第一个数a,然后j枚举第二个数b,mx记录另一个数所在的数组范围在[i,j]的对应的函数的最大值。遍历所有的查询,看i是
传送门:点击打开链接题意:有许多人带有权值的礼物来拜访公主,公主会在第ti个人到的时候把门打开瞬间,放ki个人进来,其中进来的顺序是权值最大的先进,如果权值一样大就先来的先进。当人全部到齐后会再次开门让所有人都进来。思路:先将开门的时间读入然后排序,然后模拟将n个人都插入到优先对列中,然后离线维护答案,最后输出即可#include#include#include#include
传送门:点击打开链接题意:给你一个n,和一个长度为n的01序列,定义一种操作,其中序列的最左端和最右端不变,现A[i]等于原A[i-1],A[i],A[i+1]中的众数。问经行多少次操作,序列达到稳定,即再次执行这种操作后序列和执行前还是一样的。如果不能达到稳定,则输出-1思路:如果不能达到稳定则输出-1简直就是个坑啊!仔细分析一下,根本就不可能不稳定,换句话说无论怎样最后都是能达到稳定的
人的能力都会+1,问最后剩余的人数思路:很明显可以逆推。用isc[i]表示有多少个Ci等于i,s[i]表示isc在前i个的前缀和。那
传送门:点击打开链接题意:给两个串s1和s2,现在要构造一个串s3,使得s3与s1和s2比较,恰好都有t个对应位置的字符不一样思路:因为长度都为n,t个对应位置的字符不一样,那么就会有n-t个位置的字符是一样的。那么既然要有n-t个位置字符是一样的,那么如果以前两个字符在某个位置是一样的,那么这个位置肯定要选上,因为这样绝对是最优的那么先统计出s1和s2两个字符串有多少个位
题意:一个图书馆,有个程序,记录了进来和出去的人,,但是开这个程序之前可能房间内还有一些人,问这个房间至少能容纳多少人才行 思路:维护ans和now,now表示当前程序记录下的房间人数。ans表示答案 遇到+,表示进来了一个人,那么标记一下,然后now++,再更新一下ans取最大 如果遇到-,如果之前被标记了,表示是程序开始后才进来的,所以直接now--就行 如果之前没有被标记,表
传送门:点击打开链接题意:给你一个1~n的排列s1,和另一个排列s2,要把s1变成s2,只能交换数字,交换数字的代价是两个数字位置之差,求最小代价思路:首先把题目变换一下,,变成已知原串s3,要变成1,2,3,...,n-1,n的排列的最小代价,,可以通过s1和s2得到s3之后的操作,就变得十分技巧。首先,我们能发现,如果交换的两个数字,都是朝着各自的位置前进,那么就一定是最优的。那么
题意:从一个房间把桌子搬运到另一个房间,需要10分钟,且中间的走廊在这10分钟内不能被别人使用现在有许多条桌子要搬送,问最少需要多少时间很容易想到贪心,某个点,被区间覆盖的次数最多的,就是最长需要的时间但是这题有陷阱,因为并没有说明每次给的两个数字,前一个会小于后一个所以可能后前一个会大于后一个,所以在读入的时候可能要交换左右的大小#include#inclu
唉,这题实在不会用动态规划的方法,,我比较无脑首先,在A数组中只放1然后,枚举在2e9以内的2的所有倍数,比如2^1,2^2,2^3,,........拿这些数去分别乘以A数组中以前有的数字,并加入到A数组的末尾然后,枚举在2e9以内的3的所有倍数,比如3^1,3^2,3^3,,........拿这些数去分别乘以A数组中上一次操作后有的数字,并加入到A数组的末尾5也
因为时间给的非常多,然后测试组数又很小,所以是一个很粗暴的模拟 只要从1000到9999枚举答案,然后再判断符合答案的个数,看个数的数量差不多就做完了 然后就在于如何判断有几个数字同时存在,我的思路是用vis1和vis2分别记录进行比较的两个数字中,每个数字出现的次数 那么如果对于某个数字,vis1[i]和vis2[i]都不等于0,就说明有min(vis1[i],vis2[i])个数
经典的区间翻转问题。和挑战程序设计那本书的那个题几乎一样,就把那个代码敲上去改了几句话就可以过了思路:从大到小枚举区间大小,再枚举最后翻转成的那个数字然后从第一个开始判断,应该翻多少下,并维护前K个翻转总次数sum那么第二个又应该翻多少下,是确定的,可以求出来,依次求第三个,第四个。。直到最后小于K个的时候,判断剩下的是否都等于我们枚举最后成的那个数字。所以翻转
一看到题,刚开始会感觉很难想,但是可以先从10以内的数开始找规律 比如我们先看到7,设pre(n)表示把n里面的数字累加起来直到n pre(7^7)=pre(823543)=pre(25)=7 因为太大,我们会想,能不能结合快速幂的思想呢 7^7=7^3 * 7^3 * 7 然后这时,我们会发现 pre(7^7)=pre(pre(7^3)*pre(7^3)*7) 再找
噗,水题没什么好说的#include#include#include#include#include#include#includeusing namespace std;int score[]={0,1000,1500,2000,2500};int main(){ int T,A,B,ansk=0; scanf("%d",&T); while(T
这题很容易能想到是贪心,却一下子很难想清楚如何贪心首先可以很容易想出这样的贪心:对于一个机器,肯定是按照x大的先考虑,x相等时y大的先考虑。因为x的权值很大,这样钱是最多的考虑任务的选择次序,很容易想到肯定是先考虑钱多的,再考虑钱少的想到这里,我们就知道了,肯定要对任务按照x,y的次序从大到小排序,然后从大到小去枚举然后好像就不知道怎么处理机器了,,这时候又可以
对于这种数据非常大的,如果一下子推不出公式,基本上都是找规律我们可以按照题意,将k个球的权值全部算出来,然后排序,然后分奇偶性累加在一起进行比较然后大量的测试输出我们就很容易的可以找到规律了#include#include#include#include#include#include#includeusing namespace std;typede
传送门:点击打开链接题意:告诉你两个序列An和Bn,都是{1,2,,...n}的排列,然后现在可以任意交换每一列,问之后能构成最长公共子序列是多长思路:首先想特殊点,想到A中1的位置,假如我们把A中1的那一列移动到最前面去,如果对应的B也是1,那么刚好就是相等的,那么肯定能使公共子序列长度+1,如果不相等,假如A是1,B是3,那么我要让3能立即构成公共子序列,就要让下一次的A为3,再看此时
传送门:点击打开链接题意:n个人,告诉你n个人的工资,每个人还有一个权值,现在从这n个人中选出m个人,使得他们的权值之和最大思路:先按照工资从小到大排序,那么每次最优的必然是一个子区间中的值。所以我们能确定,所有的答案此时都是子区间,。所以利用尺取法O(n)求出答案#include#include#include#include#include#include#includ
传送门:点击打开链接题意:参照那个表格,,最后给出的n*n个那表格中的数字,是打乱的,求还原出是哪n个数字思路:可以发现,G表格中,正斜对角线恰好是ai,因为对自己的gcd就等于自己。那么也就是说所有的ai最后都会存在于n*n个数字中,进一步一想我们就能发现,最大的那个数字一定是A数组中的,因为gcd不可能比原数大。那么第二次我再选出最大的,此时这个最大的会与之前已确定的A数组中的会有gc
传送门:点击打开链接题意:告诉你有哪些字符可以用,然后再告诉你哪些单词不能出现,要你求长度为m的字符串只由给你的字符组成,但是不能出现那些单词的种类数。思路:..一分析就发现,,貌似爆long long了,,醉了。。总的思路和那个DNA的思路是一样的,用AC自动机完成了矩阵的转移,很逆天的压缩了状态。。除了大数其他和那题基本一样的可以去看看那题..#include#include#
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号