0%

思路讲解

我写的算法相当于是一个贪心,就是先看可不可以插入出现次数最少的字符,然后看能不能插入次小的,再看能不能插入次次小的。

不断重复这个贪心操作,如果发现次数超过了 2N2N 次还是无法达到平衡要求,那么直接输出 1-1 ,反之如果中间哪次平衡了,那么就输出步骤数量以及保存好的步骤。

AC代码

https://codeforces.com/contest/2092/submission/315587701

心路历程(WA,TLE,MLE……)

哈哈,应该按照我最初想的写,不应该偷懒/

思路讲解

典型智商题?其实也没有,通过打表,我们猜到,答案为sum(cntOdd1)sum-(cntOdd-1),当然要排除isAllOddisAllOddisAllEvenisAllEven 情况

AC代码

心路历程(WA,TLE,MLE……)

前面WA是因为没有考虑isAllEven的情况

思路讲解

AC代码

心路历程(WA,TLE,MLE……)

思路讲解

处理这种任意组合问题怎么搞?不可能把每个组合都求一遍时,应该怎么办那?

哈哈,其实那就要跳脱出这个组合啦。

看了提示,用异或字典树做。

这是因为字典树共享前缀(假设位数高的为前缀)。

AC代码

https://codeforces.com/contest/2093/submission/315036163

心路历程(WA,TLE,MLE……)

CE

这里的val值最好不要事先写上去,反正codeforces的编译器初始化空间大概是33MB左右,太小了。所以这种结构体可以不赋值。

1
2
3
4
struct Trie{
int val=INF /* ,digit=0 */ ,nxt0=0,nxt1=0;
// bool tag01=false; // tag01好像没有用,但也懒得删了,就当是方便调试
}tr[MAXN*14];

思路讲解

非常明显的二分答案,最小的最大

AC代码

https://codeforces.com/contest/2093/submission/314861882

心路历程(WA,TLE,MLE……)