0709 oj1
非常简单的输入输出,做起来没什么感觉。
记得有卡每一行最后一个空格的和最后一行后面你的换行。
10、11两天特殊原因
0712 oj2 STL
今天有两三道模拟约瑟夫环的题目。
A:圆桌问题
给你n和m,表示有n个好人和n个坏人,报数到m处死一个人,让你输出让所有坏人先死的排列方法(G表示好人B表示坏人)。
B:Text Reverse
翻转每一行的每一个字符串。
Sample Input
3
olleh !dlrow
m'I morf .udh
I ekil .mca
Sample Output
hello world!
I'm from hdu.
I like acm.
C : ACboy needs your help again!
模拟队列和栈进行输入输出,如果输出时没有元素打印“None”。
D : 士兵队列训练问题
这个我印象中花费的时间比较长,好像是因为freopen忘记关掉导致调试了好久找不到bug。 有时间再试一试!题意比较奇怪,我也不怎么能描述清楚。
E : 产生冠军
题意也比较怪,勉强解释一下吧。
输了任何一场比赛的人失去冠军的机会,剩下的人都可以是冠军。
当仅剩下一人时就产生了冠军输出“Yes”,其他情况都是“No”。
F : Shopping
开始的时候没有认真看题目,以为是每天的价格都更新读入。
实际上是第二天开始读入的都是价格的增加量。
另外注意初始化price。
G : Ignatius and the Princess II
用到了字典序的库函数next_permutation。
0713 oj3
A : Red and Black
简单dfs即可。
B : Solitaire
双向广搜降低复杂度。
首先,每个棋子虽然能跳能走,但实际上每个棋子每一次最多有4个方向4中走法。
至于能不能走,是走还是条要取决于这四个方向上有没有其他棋子。
4个棋子走八次的复杂度是,第一个4是4个棋子,第二个4是4个方向。
如果从起始状态和结束状态向中间状态搜索就只有,复杂度大大降低!
C : N皇后问题
老问题了, 但这次对时间复杂度的要求比较高。
我想了一种比较取巧的办法,先跑一边把n皇后对应的排列数遍历输出。
然后,再另写一个程序开数字记录这些数字对应关系,然后直接输入输出。
(谁能比我快?嘻嘻!)
D : Power Calculus
巨难的题目。 两种做法,第一种dfs+剪枝,看不懂!
这个剪枝是非常复杂的那种,可怜咱都不知道啥是剪枝,看了半天不懂。
第二种是id-dfs,就是dfs和bfs的混合吧,反正有限深度的dfs这句话我是懂了。
也需要简单的剪枝,就是通过简单计算筛选掉一些不可能情况,减少时间浪费。
0714 周日休息
0715 oj4
题量变多了,变了,变了...
A:How Many Tables
并查集,还算简单!
B:Binary Tree Traversals
给你先序和中序,让你输出后序。
道理还是懂的,代码比较难敲,本人对树一窍不通,只能选择递归。
用vscode调试了一个多小时的递归,出来了还是挺开心的。
这个 代码需要记下来,比赛的时候我可调试不来。
C : Shaolinzhen
利用了map的存储方式,即按照下标的大小存的。
D : Robotic Sort
Splay树,为了搞懂这个我还去看了一下平衡二叉树。
结果平衡二叉树看的还Ok,这个Splay树还是很懵,太难了!
最后,没有手敲代码,拿了别人的AC代码认真地理解了一遍就交了。(还是第二天搞的!)
不过,好像平衡二叉树只需要掌握这一个就可以无敌,很强大的数据结构!
E : Lost Cows
奇怪(傻子)老板的奇怪问题。
已知逆序数求原序列,用树状数组再次卡时间过,真开心。
倒着看就行了,最后一个数的逆序数就表示这个数是第几小,就能直接得到编号。
然后倒着往前数,一个一个就推导出来了!
实际上,是这样的:
从最后一个数开始,在合法范围[1,N]内二分找到正好适合自己的位子(排名)
我的ranks-后面比我小的个数(树状数组里的)=我的逆序数
F : A Simple Problem with Integers
主要是区间维护和区间查询,用树状数组的变形刚好解决,真开心!
这个变形很牛皮,还不是特别懂,有时间再看看!链接
0716 oj5
今天有三道控制小数点后位置的题,都说四舍五入,直接%.nf会四舍五入吗?反正我都AC了。
%lf可以用来读入double浮点数,不能用这个来输出!
A : 今年暑假不AC
看电视节目的最大数量,看短的呗,其实没理解太明白。
策略就是,按结束时间的先后排序。
然后,设初始的节目结束时间为0。
每次都去找第一个大于上次节目结束时间的节目,也就是那个时刻能看的最短的节目吧!
B : 迷瘴
手上有体积相等,浓度不等的若干药。配出混合浓度不超过w的解药。
配药时,必须把两种药的全部混合在一起,可能是没有量筒之类的东西吧!
比较简单,排序之后一种一种试着加,知道浓度超过w。
C : Entropy
优先队列的cmp函数或类或stl的less和greater搞个模板出来呗,不然比赛时多难受!
第一个数字size()*8,第二个数字用优先队列求(这一步不太懂),最后一个数是前两个数之比。
D : Strange fuction
求导数发现导函数是单调递增的,并且一开始导数一定为负,分两种情况:
1.最后导数也是负的,原函数一直递减,最小值时取x=100
2.最后导数是负的,原函数先减后增,最小值在极值点取得,也就是导函数为0时,二分即可。
E : Inversion
逆序数-k和0求max就行了,其实不是特别的懂,试了一下就AC了。
F : Who's in the Middle
太简单了,sort之后输出num[N/2]就OK了。
16号下午做了2018ccpc吉林的题目
感觉比上次江西省赛难多了呀,主要是英文太硬核了吧!
不知道为什么航电还有在endTime之后关闭提交。
A:The Fool
数学找规律,打印几千个数就看明白了。规律挺简单,代码不是特别容易,好歹AC了。
主要是lower_bound(大于等于)和upper_bound(大于)的理解不太对
最后用upper_bound过的,讲道理两个用拿个都可以,但用upper_bound应该更简单一些吧!
B:The Worldda
难度在于:
1.0点换成12点了
2.可能会出现两次+12或者-12所以要写成while(而不是if)
3.就是要判断yesterday、today、tomorrow,输入格式也不是特别好处理。
C:Justice
居然被我AC了。
首先,要知道合并两个不相等的数是没有意义的!
我用的是优先队列+并查集合并两个大小相等的堆。
最后检查有没有两个以上大于等于1的堆。
可能,队列size为1并且队首(最小值)不是1,这时候还会跑while循环,就可能导致队列空的时候仍要pop的错误。
E:The Tower
尝试用cos去做,发现一般会有两个cos相等的解,而我们要求的是小的解。
败在了二分不会写,脑壳痛...
F:The Hermit
好像sum = 1然后res^=max(0,x-2);就AC了,我是没懂题意的。
I:Strength
没思路,题目大意懂了。
就是敌方有两种怪一种处于攻击状态,一种处于防御状态。
首先,对方有怪物时就不能直接打脸(敌方英雄)。
一回合我方的一个怪物至多进攻一次。
然后,攻击和防御怪的区别就是,有溢出伤害的时候防御怪不会传递给敌方英雄,而攻击怪会。
我们要计算的是一回合最多对敌方英雄造成多少伤害。
还有一个不重要的信息,就是两个怪物战斗时:
若a的力量大于b那么b消失,a没有任何影响。
若a的力量与b相等,那么一起消失。