A——HDU 5974 A Simple Math Problem <-题目链接 签到题
Given two positive integers a and b,find suitable X and Y to meet the conditions:
X+Y=a
Least Common Multiple (X, Y) =b
Input
Input includes multiple sets of test data.Each test data occupies one line,including two positive integers a(1≤a≤2*10^4),b(1≤b≤10^9),and their meanings are shown in the description.Contains most of the 12W test cases.
Output
For each set of input data,output a line of two integers,representing X, Y.If you cannot find such X and Y,output one line of "No Solution"(without quotation).
Sample Input
6 8
798 10780
Sample Output
No Solution
308 490
这里需要知道一个神奇的结论:
和一个普通的结论:
神奇的结论证明可以:
设;
然后就证明了QAQ
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
F - Binary Strings <-题目链接 铜牌题
Gym - 101845B
题目大意:给定两个长度相同的01串,同时定义两种操作:
操作1:把当前字符串最后一位移到第一位
操作2:翻转两个相邻的串
求进行最小的操作2次的数来把第一个变成第二个串,如果无法转化输出-1,如果可以输出操作2进行的次数
数据范围支持暴力,不过尽管能暴力还是要注意一个问题,第一个和最后一个也是可以交换的。
为什么?通过题意来看是不可以的,不过我们可以这样想,我先把最后一个字符移到第一位,把首位两个字符翻转,然后其他都不动,再进行操作1变成原来的位置顺序,就实现了交换。
所以暴力枚举所有可能的操作1的情况,然后每种情况暴力判断可不可以转换过去,如果可以就取ans = min(ans,nowcnt),否则不操作.
代码很简单:
#include
#include
#include
#include
#include
#include
#include
#include
#include
G - Cryptography<-题目链接 签到题
Gym - 101845C
送分题。
题意很好读,不再赘述。
因为字符从33开始,32是空格 所以scanf%s读即可。
方法1:前向星建图,每个字母跑一遍spfa(),顺便记忆化一下。
方法2:大部分人都这么做的,弗洛伊德暴力n^3跑一遍任意两点最短路,但是,细节,细节,细节!
两点间可能给出多条边!!如果用邻接矩阵,一定要取最小值!!
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
H - The Intriguing Obsession<-题目链接 铜牌题
CodeForces - 869C
参考博客:在这里
附图:
顺便 三棱柱是左边这东西 不是右边这东西23333333333
考场上没想出来确实值得自己反思一下
题解博客说的很好了,我就不多说了。有一个小技巧下一个题介绍
I - Anton and School - 2 <-题目链接 银牌题
CodeForces - 785D
题目大意:给定一个括号序列,问有多少种()或者(())这种完整的包裹的括号子序列,不能是()()这种
思路:队友做的,膜大佬
我们想一个有左括号的地方,假设它左边有a个( 右边有b个)
那么这个点对答案的贡献是:......
(解释一下 代表只选当前左括号,从右边右边右括号中选一个 )
(代表从当前位置左边左括号选一个,从右边右括号里选两个)
然后所有合法的值得和就是它这个位置对答案的贡献
然后,你以为这样就完了吗233
然后咋整啊= = ——进入挂机模式zzz
队友无聊翻书:卧槽!!!你猜我找到了什么!!!!
史上最刺激AC题目
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
J - Purifying Machine<-题目链接 铜牌题
POJ - 2724
题目大意:自己百度2333
思路:强行把每个带*的都拆开。
然后对每个数再拆成两个,如果一个数可以通过改变二进制的某一位变成另一个数,比如a,b两个点,然后a->b^1和b->a^1建边
然后这就是个二分图了,相当于求最大边覆盖,通过定理我们知道就是求最大匹配。
但是,我为什么wr了一上午+半个下午呢?
我们来看这个最大匹配,模拟样例我们可以看出来匹配一般是一对一对的匹配。所以最后要除以2
但是,其实……有匹配数为奇数的时候。。这个时候答案加的就是匹配数/2+1了,因为那个单独的1无法成对匹配。
所以最终答案要分一下类(也可以不用分类,直接ans += pipei/2 + pipei%2;
#include
#include
#include
#include
#include
#include
#include
#include
#include
其他题暂时没看,目测D,K还是可做的题,都是银牌题左右的题把。