摘要:切比雪夫距离和曼哈顿距离就是变成了八个方向只用一步首先八个方向距离就变成了max(|x1-x2|,|y1-y2|)这样的一个最值式,似乎并没有什么卵用学到了一个非常机智的转化:max(|x1-x2|,|y1-y2|)=(|x1-x2+y1-y2|+|x1-x2-y1+y2|)/2 。这个公式需要从两...
阅读全文
摘要:这个题目和前几天做acdream的那个题目类似,可以说是加强版那个题目是一维点,那个题目其实只用看中间两个点,我当时做的时候就是枚举n个点,然后累加累减距离达到快速计算其他点到该点距离本题完全可以利用这个分开计算其他点到这个点x轴向与y轴向距离和记录id,两次排序,然后累加累减距离,最后选取n个点x...
阅读全文
摘要:想了一会突然想到蓝桥杯最后一题,用了和那题类似的技巧处理,当时写完还自我陶醉了一下,虽然只能过小数据,但我过得姿势好看哇==将边权从大到小排序,然后开始加边,开了一个vis数组(就是这个数组)表示这个集合为真或者假真表示集合内有特殊点,反之无,只要出现两边都为真就ans+该边,vis伴随集合并相应的...
阅读全文
摘要:随机开了场多校,题目挺好玩题意化简下来就是比如有5 3 4 6 10 11,那么2-6里面有三个连续区间假设一个区间都是独立的,就是最多有l-r+1个连续区间,然后我们要做的就是减去重复的我们离线从左到右扫描原数组,只要a[i]-1出现在前面,那么就在这个位置+1,表示当前i这个不算独立,同理a[i...
阅读全文
摘要:英语弱是硬伤啊==比赛看了A半小时活生生没看懂题意,后来带数据带猜才明白题意输入A,B,n,表示一个首项为A公差为B的数,n个询问每个询问给出l,t,m你需要算出最大的r,使l-r之间的数通过(标题上面)的规则在t次内减完==看明白题意,首先想到就是一个二分,然后在二分中需要快速check出是否可行...
阅读全文
摘要:将询问的高度和树的高度都变成离线排个序,然后就可以把砍树变成加树对于一个询问高度b[i],将还未加入的所有大于这个高度的树都加入,加入的树1.左右相邻都有树?连通区域-12.左右相邻都没树?连通区域+1再把这个位置种上树,最后输出答案== 1 #include 2 #include 3 #inclu...
阅读全文
摘要:比赛时总感觉很混乱,其实昨天晚上仔细一想就很简单了==首先,我是知道我要拿最大id点且入度小于等于k的,那就拿,继而,需要将他相连边全部入度-1,如果入度小于等于k加入优先队列一直到队列为空,类似bfs那样找,代码实现也比线段树好多了==心塞,本来手速过A分挺高,手贱hack又是一夜回到解放前,又掉...
阅读全文
摘要:题目中规定要换来的物品必须要是目前没有的=其实如果有重复的就可以把重复的去掉。。所以是等价的所以可以在输入的时候预处理取与不取当前值能拿到的值放入dp中然后在0的基础上一直寻找最大可交换的物品,一直到找不到结束== 1 #include 2 #include 3 #include 4 using n...
阅读全文
摘要:题意和范围:http://codeforces.com/problemset/problem/385/C好题呀==在筛质数的过程中顺带累加筛他的质数vis值最后统计就是前缀和相减== 1 #include 2 #include 3 #include 4 using namespace std; 5 ...
阅读全文
摘要:本题关键地方在于:只要确定前n列的点阵,后面每列放多少就全部确定了==这样就可用dp和组合数预处理递推前面的n列放法,同时利用快速幂将所有列放法计算出来 1 #include 2 #include 3 #include 4 using namespace std; 5 #define LL long...
阅读全文
摘要:首先n为偶数必然没有n为奇数优==而n为奇数最多能放(n^n+1)/2个1特别注意特判x=3的时候需要5个,因为3个那样放就相邻了== 1 #include 2 #include 3 #include 4 using namespace std; 5 int main() 6 { 7 int n...
阅读全文
摘要:注意到一个重要的信息,每个x对应的sell最多只有一个=2^x>2^(x-1)+2^(x-2)+...+1因此可以按照x的sell从高到低排序,继而扫每个sell,对于每个sell从原数组结尾到开头扫到第一个win,再更新这个区间不可卖即可发现函数返回vector写些简单的大数还挺好的== 1 #i...
阅读全文
摘要:转化成1-m里面多少个首尾数字相同数字对于个位数本身满足而其他的,注意到对于每一个x,x/10再加上末尾固定的数即满足,所以答案为m/10+9?最后注意到如果m的个位数 2 long long fun(long long m) 3 { 4 if(m=10) m/=10; 7 if(m...
阅读全文
摘要:图见:http://codeforces.com/problemset/problem/343/B巧妙!将红上蓝下记为1,红下蓝上记为-1,压栈,相同相消,最后栈中无元素即可以分开= 1 #include 2 #include 3 #include 4 #include 5 using namesp...
阅读全文
摘要:串联1Ω电阻:R+1并联1Ω电阻:R/(R+1)这样就从目标电阻倒推回去需要多少个 1 #include 2 #include 3 #include 4 using namespace std; 5 int main() 6 { 7 long long a,b,x,tmp; 8 scanf(...
阅读全文
摘要:转化成a/rev(a)==rev(b)/b这样就容易做了先判断大区间有没有到w个,然后开两个map进行尺取x=n1 y=1如果当前对数>=w x--,否则y++,中间有涉及到两个map的删减以及在满足情况下更新答案 1 #include 2 #include 3 #include 4 #includ...
阅读全文
摘要:设i行j列=a行b列列出表达式进行化简,会发现就是个gcd 1 #include 2 #include 3 #include 4 using namespace std; 5 int gcd(int x,int y) 6 { 7 if (y==0) return x; 8 return gc...
阅读全文
摘要:最高就是第一名=最低的话贪心,一轮从大到小,另一轮从小到大,尺取最多即最多能有多少个>=k 1 #include 2 #include 3 #include 4 using namespace std; 5 int a[100005],b[100005]; 6 int main() 7 { 8 ...
阅读全文
摘要:不去实际上交换行和列=用两个数组表示当前行/列是原数组哪一行/列,这样只用交换变量 1 #include 2 #include 3 #include 4 using namespace std; 5 int a[1005][1005],idx[1005],idy[1005]; 6 int main(...
阅读全文
摘要:codeforces好多这样的想到很简单,想不到感觉难到爆的题目,思维!很简单:只要原序列第k个元素后面有和第k个不一样的就变不了,思考=可以就看第k个前面连续多少个和第k个相同即可= 1 #include 2 #include 3 #include 4 using namespace std; 5...
阅读全文