![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
乱搞与思维
Love_xyh
这个作者很懒,什么都没留下…
展开
-
CF1373E Sum of Digits
网上的好多题解没有看懂,题解中的一些"显然"的结论也觉得完全不显然…我们如果枚举这个数列的第一个数字的个位,那么,如果存在这个数列的话,是一定可以构造出这个数列的。(因为k<=9,所以数列长度<=10,最多只会进位一次)1.当这个数列不存在进位的时候,且第一个数的最后一位为now时,就可以表示为:a+now,a+now+1,a+now+2, … ,a+now+k。(其中,因为不进位,所以now+k<=9,而a则表示他们相同的 最高位到十位)对于这种情况,知道now,k和n后,就能够求原创 2020-09-13 04:45:40 · 238 阅读 · 2 评论 -
BZOJ 1110: [POI2007]砝码Odw
看了题解,发现是用进制转换来做。这种题不看题解谁会想到用进制转换这种冷门东西???知道是进制转换就很容易了,就变成了一道贪心+模拟题。首先,进制是a[1],a[2],a[3],…a[n],然后将所有容器体积都加入,可以得到一个(会变的)进制数:xxxxxxx…xxxxx。考虑到只需要求有几个砝码能够被装下,而不用求利用率,所以是道贪心,从小到大进行放置显然优秀。于是我们就从小到大放置砝码,这...原创 2020-01-20 23:59:24 · 139 阅读 · 0 评论 -
[SDOI2013]直径
性质一:树的直径必须经过一个点,且这个点为这个直径的中点(中点可以为一条路径的中点)性质二:修改一条已知直径的权值,若其它直径与该直径有相交部分,则其它直径权值也会更改(好像比性质一更显然些)所以我们就用性质二来做。前后求两次直径,差即为答案。#include <bits/stdc++.h>#define int long longusing namespace std;const int N=2e5+5;int n,u,v,w,p,ans,d1,d2,last;int d[N原创 2020-07-23 16:05:32 · 101 阅读 · 0 评论 -
洛谷 P3413 SAC#1 - 萌数
题意:求范围内符合:至少有一个回文子串的数的数量。如果正着求,要考虑容斥,很麻烦,所以我们就求:“全部数量” 减去 “一个回文子串都没有的数的数量”。如何做到一个回文子串都没有?str[i]!=str[i-2] str[i]!=str[i-1]即可。一个回文子串都没有的数的数量明显是:solve(m)-solve(n-1)。但是,我们需要求n-1? 高精度吗?其实只要:solve(m)-solve(n)。然后判断再判断一下n就好了 。#include <bits/stdc++.h&g原创 2020-08-05 20:53:05 · 146 阅读 · 0 评论 -
CF342E Xenia and Tree
首先思考一下暴力怎么写:(有以下两种很明显的方法)1.把每个不断得到的红点都存储下来,对于后面的每个询问,与每个红点通过lca求得点距,取最小值。2.每得到一个红点,就对于整棵树做一次bfs,更新树中每个点到最近红点的距离。我们发现,如果红点数量为n/2个,询问数量为n/2个,那么两种暴力思想都会被卡。那么我们就把红点分个块来处理吧。假设红点数量和为S。将红点分为sqrt(S)个块,每个块内sqrt(S)个红点。当每得到一整个块个数的红点时(即sqrt(S)),就对整棵树做一次bfs。复杂度:原创 2020-07-22 21:50:29 · 289 阅读 · 1 评论 -
CF1153D Serval and Rooted Tree
要用dp来求解应该是可以看出的。但是状态该怎么设呢?f[u]表示构造完u的子树中的叶子节点后,u节点的最大值吗?差不多这个意思,只不过此题不能直接用f[u]来表示u节点的最大值,不然的话,我们不能得到叶子节点的f值了。即,边界值不能得到。所以设:f[u]表示u的子树中的叶子节点构造完成后,u节点答案最大是第几大。(设整棵树有k个叶子节点,指k个叶子节点里的第几大)最后将输出转化一下即可。#include <bits/stdc++.h>using namespace std;c原创 2020-07-22 22:09:48 · 129 阅读 · 0 评论 -
[TJOI2013]松鼠聚会
模拟一下样例,发现是切比雪夫距离。根据神奇的公式,把切比雪夫距离点阵中的(x,y)转为(x+y,x-y),即是曼哈顿距离点阵了。转为曼哈顿距离后,可以通过前后缀预处理的方案实现O(n)取min。#include <bits/stdc++.h>using namespace std;const int N=1e5+5;int n;double a,b,ans=1e30;d...原创 2020-03-26 21:10:46 · 130 阅读 · 0 评论 -
CF269B Greenhouse Effect
简化题意:给出一个序列,每次可以移动一个数到任意一个位置,问最少多少次能使得序列非降。一开始看了洛谷是黄题以后写了这个傻逼代码:#include <bits/stdc++.h>using namespace std;const int N=5e3+5;int n,m,ans;int a[N],minn[N];double x;int main(){ scanf("%d...原创 2020-03-09 01:59:52 · 186 阅读 · 0 评论 -
洛谷 P4597 序列sequence
此题的强化版#include <bits/stdc++.h>#define int long longusing namespace std;int n,x,ans;priority_queue<int>q;/*题解们都说:考虑当前的数x和之前的最大数y(默认x<y,因为如果x>=y已经满足非降了)为了让它非降,我们要做区间[x,y]里找到一个数...原创 2020-03-09 01:59:03 · 313 阅读 · 2 评论 -
洛谷 P1884 [USACO12FEB]过度种植
矩形面积并范围n<=1000,那么,我们就可以考虑一个p(n^2)的暴力做法,其中,p是一个玄学常数,因为有break,所以只要不故意卡,就能过。先把所有出现的点离散化出来,然后暴力枚举两个相邻的离散出来的点,如果能找到一个矩形,使得这两个点均在这个矩形内部,那么,就可以加上面积。总体思路就是,把一些大的交错的矩形,分割成一个个小的矩形来进行答案统计。#include <bits...原创 2019-10-21 20:09:12 · 360 阅读 · 5 评论 -
BZOJ 1002: [FJOI2007]轮状病毒
首先考虑暴力:#include <bits/stdc++.h>using namespace std;const int N=105;int n,cnt,ans;int a[N],f[N];struct number{int x,y;}num[N];int find(int x){ if (f[x]==x) return x; return f[x]=find(f...原创 2019-11-19 18:16:11 · 112 阅读 · 0 评论 -
CF1287B && CF567C
这两题都不难,但都是一样的套路我做第一题的时候没想出来。从前往后暴力累加答案的同时,可以把前面出现过的值用一个map数组累加起来,就很方便了。CF1287B#include <bits/stdc++.h>#define int long longusing namespace std;const int N=2e3+5;int n,m,ans;string s[N];...原创 2020-02-13 21:28:16 · 344 阅读 · 0 评论