网站配色 蓝色/seo技巧seo排名优化
1.cf ArrayDestruction
https://codeforces.com/contest/1474/problem/C
大意:T组测试样例(T<=1000),每组给定一个n(n<=1000)接下来给定一个长度为n*2的序列a。1<=ai<=1e6.
问是否能确定一个数X,满足以下条件,在序列中找到两个数使他们的和为X,删除这两个数,然后X更新成两个数中较大的那个,直到序列全部被删除。如果可以全部被删除第一行输出YES,接下来一行输出X,接下来n行输出每一步删除的两个数,如果不能输出一行NO。
思路:这道题思路想对了,但感觉有点复杂,加上不太自信就没有去实现。看了题解之后才发现思路是正确的,然后在题解代码的基础上完成了自己的代码。说到底还是码力不行,还做不到以最简洁的方式实现想法。
具体思路是这样:首先想到找关键点,X每次更新成两个数中大的那个,但是呢,如果有个比这两个数还大的数没有选,那没办法了,这个数一定消不掉。所以每次必须选一个当前剩余序列的最大的数,然后根据X判断另一个数存不存在就行了。把每次选的两个数加到 vector的二元组中,根据size就能判断合不合法了。对于第一个的X怎么确定呢?暴力枚举就行了,首先从小到大排序。最大的那个数是必须要选的,对于另外一个要选的可以枚举前面所有可能来寻找一个合法的X。注意在代码实现上有个细节:就是当X-a[i]==a[i]时得确保cnt[a[i]]>=2;
总结:关键点在于X每次更新成两个数中较大的那个。每次选都必须选一个当前剩余序列最大的数,想清楚这一点后就很简单了。
2.Gap HDU - 1067 大意:T组测试样例,每组给定一个4*8的如图
问最少进行多少次操作变成,如果不能输出-1
操作方式,首先把11,21,31,41。放到开头,不计入操作步数,每次可以将等于空格前的那个数加1的数放到换到空格处,例如 12、空格,可以进行一次操作变成 12、13,之间13的位置变成空格,但是17、空格无法进行操作。
思路:解锁了存图的新方式,char是可以存整数的,char可以存-128~127的整数,这道题就是简单的bfs,优化都不用,每次找到四个空格,看能不能换,用unoredred_map映射字符串判重,strcmp比较。
3.A计划 HDU - 2102 简单的三维迷宫,和之前做的一道差不多,没什么说的…等等,收回我刚才说的话,这题就两层迷宫,遇到传送门没的选,直接就被传送了,很容易想到,如果传送后是墙那么这个点不扩展,有个坑点,传送后还是传送门,那么就相当于一直传送了,也不扩展,就是因为这个点没想到,wa了好久。
4.kuangbing题单搜索进阶最后一题,状态压缩+dp,等学了dp之后再去写。
到此搜索专题结束,接下来开dp专题。