HGOI20181029模拟题解】的更多相关文章

HGOI20181029模拟题解 /* sxn让我一定要谴责一下出题人和他的数据! */ problem: 给出十进制数a,b,然后令(R)10=(a)10*(b)10,给出c表示一个k进制数(1<k<=16)问(R)k=(c)k在k等于多少时成立,求k的最小值 如果无解输出0. sol:显然a,b比较大的时候a*b一定爆longlong,考虑一个问题,显然若a*b>1e18那么c一定不可能等于R,一定小于等于R(主要是由于给出的c不含有字母) 然后弄个stack来求一下a*b转k进制,…
题目链接 完全模拟 1.模拟结果 当我们的模拟程序执行结束时,直接执行模拟结果函数,用于比对我们的结果和数据给出的结果. bool yes(char a[],char b[]) { ;i<=;++i) if(a[i]!=b[i]) ; ; } void print() { memset(o,,sizeof(o)); &&mk==)||(mk==)){o[]=]=]=]=')';} else { ; mi1=mk%; ) {mi10=mk/;o[]=]=]=]=]=mi10+]=mi1…
sol:第一题就DP?!然后写了O(n^2) dp再考虑优化!!!(尽量部分分带上!!!) 我写了正确的dp然后优化错了,具体的dp方法是考虑到对于右侧到左侧他是没有后效性的 所以定义f[i]为i及以后最大的代价和,对于合法的j,转移f[i]=max{f[j]+P[i]},j需要满足a[i]+x[i]<a[j],j>=i 由于给出的a[i]递增然后我只要往i的右侧找到第一个合法的j然后转移就行了,复杂度O(n log n) 我错在了用堆来优化,然后把后面的删掉了,其实可以再前面的从被误删的东西…
problem:给定一个序列,问你能不能通过一次交换把他弄成有序 sol: 对于0%的数据,满足数列是一个排列,然后我就打了这档分(自己瞎造的!) 对于100%的数据,显然我们先对数列进行排序然后上下匹配即可,如果数相同位置,数的大小不同有0个或2个就行否则不行 还是要仔细啊啊啊啊啊啊! problem:给出一个图然后问你在某个地方到染料,被染的面积是多少. sol:显然对于100%的数据情况有点多,然后我们分类讨论(我的方法贼tama烦) 首先我的草稿纸上出现这样一个东西: 然后我就把这个图弄…
T1.rotate [问题描述] ZYL有N张牌编号分别为1, 2,……,N.他把这N张牌打乱排成一排,然后他要做一次旋转使得旋转后固定点尽可能多.如果第i个位置的牌的编号为i,我们就称之为固定点.旋转可以被认为是将其中的一个子段旋转180度,这意味着子段的第一张牌和最后一张牌交换位置,以及第二张牌和倒数第二张牌交换位置,等等.写一个程序,找到旋转子段(子段长度可以为1). [输入] 第一行包含一个整数 N (1 ≤ N ≤100 000). 第二行有N个数,第i个数表示旋转之前第i个位置的牌的…
T1.game [问题描述] LZK发明一个矩阵游戏,大家一起来玩玩吧,有一个N行M列的矩阵.第一行的数字是1,2,…M,第二行的数字是M+1,M+2…2*M,以此类推,第N行的数字是(N-1)*M+1,(N-1)*M+2…N*M. 例如,N=3,M=4的矩阵是这样的: 1 2 3 4 5 6 7 8 9 10 11 12 +7取模. [输入] 第一行包含三个正整数N.M.K,表示矩阵的大小与改造次数.接下来的行,每行会是如下两种形式之一: R X Y,表示将矩阵的第X(1 ≤ X ≤ N)行变…
一起来女装吧 本题改编自USACO(USA Computing Olympiad) 1.1节的第一题 (感谢lsy同学对本题题面的贡献) 直接计算就好了 chr:将ASCII码转成字符 ord:字符对应的ASCII码值 注意:初始化为1,否则会乘0 s1=input() s2=input() sum1=1 sum2=1 for i in s1: sum1*=(ord(i)-ord('A')+1) sum1%=47//边乘边模 for i in s2: sum2*=(ord(i)-ord('A')…
比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不能加油的站就会wa..太弱.. 唔···太懒第二天才发题解.. B:Gears 并查集 题解:点击打开链接 C:Consecutive Blocks 离散化一下然后模拟 题解:点击打开链接 D:An Easy Game 设dp[i][j]为前i个位置已经匹配了j个位置的方法数. #include <…
题目链接:hdu_5818_Joint Stacks 题意: 给你两个栈,多了个合并操作,然后让你模拟 题解: 很容易想到O(1)的单个栈操作,O(n)的合并操作,这样肯定超时,所以我们要将时间复杂度均摊一下,让每个操作都是logn的,于是用上了线段树模拟. 线段树考虑染色,线段树的区间代表的是操作编号,0代表为A栈,1代表为B栈,每次merge 就把1到i这个区间染成指定颜色,然后pop就在线段树中找最右边的对应颜色的点.这样每次操作都是logn 不过官方题解给的是O(n)的解法,反正我是没想…
The Same Game [题目链接]The Same Game [题目类型]模拟 &题解: 写这种模拟题要看心态啊,还要有足够的时间,必须仔细读题,一定要写一步,就调试一步. 这题我没想到的就是退出循环的条件,之后问了别人才知道:只要所有联通块的节点全是1,或者全部消掉了,就break. 注意:dfs的结束条件在最上面的,所以4个方向循环的时候不用特判,dfs一定要写vis标记 &代码: #include <cstdio> #include <bitset> #…