# 思维
文章平均质量分 55
Echo_ac
不知未来怎样,现在一定全力以赴
展开
-
UNIQUE VISION Programming Contest 2022(AtCoder Beginner Contest 248)——E
题目传送门思路思路很简单,就是有亿点点细节。k=1:k=1:k=1: 答案显然是无限多个k!=1:k!=1:k!=1: 我们把所有直线存下来,然后看每条直线上有多少个点就可以得出答案。但是问题就出在存直线的时候,我们不能直接计算 y=kx+by=kx+by=kx+b , 因为这样浮点数误差很大。所以需要另辟蹊径,我们对斜截式变个形:这样对于每条直线,我们存下dx,dy,b∗dxdx,dy,b*dxdx,dy,b∗dx 即可,但是要注意dx,dydx,dydx,dy 存的时候应该除以它们的原创 2022-04-17 10:32:03 · 345 阅读 · 0 评论 -
L3-001 凑零钱 (30 分)——01背包+路径记录
题目思路凑出价值为 mmm的零钱等价于从 v[i]=w[i]v[i]=w[i]v[i]=w[i] 的01背包中凑出花费了体积为 mmm,最大价值为 mmm 的方案。我们将零钱金额从大到小排序,那么如果存在相同的方案,后来的字典序一定比之前的字典序小,所以直接更新即可。AC代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i&g原创 2022-03-27 23:31:51 · 567 阅读 · 0 评论 -
Daimayuan Online Judge #505. 三角果计数——思维+树上技巧
题目链接思路因为在树上,那么大概率存在些树上的一些规律技巧。 我们通过作图来看,发现只有三个点ABC在同一条路径上,就不能组成三角形。比如下图的ABD三个点,因为距离AB+BD=AD。不满足形成三角形的条件。只要不在同一条路径上的三个点就能形成三角形,那么我们枚举中转点。 比如下图的B,在它的三个子树里面每一个任选一个点出来就能组成三角形。对于不止三个子树的点,我们任选三个子树,再累加上答案。但是这样暴力枚举会超时。因为是选任意三个子树出来,我们可以这样想,当前枚举的子树A, 已经走过的子树原创 2022-03-18 14:43:45 · 653 阅读 · 1 评论 -
[CF522D]Closest Equals——线段树+离线技巧+思维
题目传送门思路应该能想到我们需要求出每一个 aia_iai 上一次出现的位置 pre[i]pre[i]pre[i] , 对于每一个询问区间 [l,r][l,r][l,r] 我们需要求出 i−pre[i]i-pre[i]i−pre[i] 的最小值 (pre[i]≥l)(pre[i] \geq l)(pre[i]≥l)。线段树维护最小值即可问题1:我们可以将每个 pre[i]pre[i]pre[i] 位置的值换成 i−pre[i]i-pre[i]i−pre[i] ,但是每次在线暴力置换一原创 2022-03-10 10:42:08 · 246 阅读 · 0 评论 -
代码源每日一题Div1 108数数
题目链接思路我们用树状数组维护区间和,将数组 aaa 带着下标,按照值大小从小到大排序,再将每个询问,按照 hhh 值从小到达排序。然后我们遍历每个询问,对于当前的 hhh ,将数组 aaa 中小于等于的 hhh的数的下标 pospospos 进行,add(pos,1)add(pos,1)add(pos,1)。这个询问的答案就是 ask(ri)−ask(li−1)。ask(r_i) - ask(l_i-1)。ask(ri)−ask(li−1)。代码#include<bits/stdc++.原创 2022-03-03 16:11:14 · 395 阅读 · 0 评论 -
CF1545B AquaMoon and Chess——思维+组合数学
题目传送门思路题目中的两个操作可以看成将一对整体的 11 与前(后)面的一个 0 交换顺序。只有当一对11与一个0交换顺序时才会产生新的状态。如果给出的数据中连续的1 的个数是偶数,那么可以我们均分成x个11。可以看出每一个11,可以和任意的一个0交换顺序。所以假设11 的个数位 aaa, 0的个数为 bbb, 则排列的方案有 (a+b)!(a+b)!(a+b)! 种, 11内部排列不会产生新的状态,0内部排列不会产生新的状态。所以去除重复的种类,答案就是 (a+b)!a!b!\frac{(a+b)原创 2022-02-07 20:28:59 · 675 阅读 · 0 评论 -
L2-023 图着色问题 (25 分)——测试点1 2 3分析
题目传送门思路测试点2:颜色必须为k种测试点1,3过不去,大概率是dfs写错了(如果是写的dfs),不能先判断走没走过,要先判断颜色是否一样代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i>=y; --i)#define pushk push_back#define popk pop_back#define mem原创 2022-02-05 20:28:01 · 628 阅读 · 0 评论 -
L2-022 重排链表 (25 分)——测试点3分析
题目传送门思路纯模拟,测试点3过不了的原因是,可能有多个next为-1的结点,而只有一个是单链表上的,其他的都是多余的,解决这个坑点即可AC代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i>=y; --i)#define pushk push_back#define popk pop_back#define mem(原创 2022-02-05 17:49:47 · 1100 阅读 · 0 评论 -
L2-020 功夫传人 (25 分)——简单做法+测试点1分析
题目传送门文章目录思路AC 代码思路这道题开一个数组记录一下编号为i的人的师傅是谁,以及它师傅的能力即可,这里注意一下得24分的情况,要注意祖师爷可能也是得道者,所以不会削减能力AC 代码#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i>=y; --i)#define pushk push_back#define p原创 2022-02-05 16:55:48 · 1122 阅读 · 2 评论 -
AcWing 2014. 岛(USACO 2012 US Open Bronze Division)
题目链接思路:很容易想到对每个田地的高度进行从小到大的排序,再依次枚举每一个高度,看看海水涨到这个高度会不会对结果有什么影响。我们就看这个田地左右两边的田地的高度和它的关系,很容易看出只有这两种情况才会对结果有影响,-1的那三个图其实可能统一判断,具体见代码。但是这样有一个问题,就是可能出现这样的情况:中间有很多个相同高度的田,但是这些相同的其实可以看做一个田,对结果的影响是一样的,所以我们用到unique函数对初始高度进行去重注意更新答案的时候,要判断是否是枚举到不同的高度了,uniqu原创 2022-01-06 23:05:31 · 385 阅读 · 0 评论 -
L1-049 天梯赛座位分配 (20 分)——测试点1,2分析
题目链接如果测试点1,2过不起的小伙伴看看这两组样例,只要做到了,本校的学生不挨着坐就可以过。意思是同一个学校的学生 xxx 和学生 x+1x+1x+1 的位置不能挨着//#case1:11#11 3 5 7 9 11 13 15 17 19//#case2:22 1#11 3 5 7 9 11 13 15 17 1921 23 25 27 29 31 33 35 37 39#22 4 6 8 10 12 14 16 18 20AC代码#include<bits/s原创 2021-11-22 00:10:39 · 1378 阅读 · 3 评论 -
牛客挑战赛53——智乃哥哥的小迷题A
题目链接思路在不考虑回退的情况,我们能通过走 nnn 次到达 1+2+3+..n1+2+3+..n1+2+3+..n 的位置。也就是 1,3,6,10,15....1,3,6,10,15....1,3,6,10,15.... 这些点现在假设回退第一次在点0回退,本来要达到点1,回退后相当于- 2第一次在点1回退,本来要达到点3,回退后相当于- 3第一次在点3回退,本来要达到点6,回退后相当于- 4第一次在点6回退,本来要达到点10,回退后相当于- 5第一次在点10回退,本来要达到点15原创 2021-10-15 22:00:29 · 152 阅读 · 0 评论 -
1013 Battle Over Cities (25 分)——段错误分析
题目链接分析思路就是并查集求连通块,答案等于连通块的数量-1段错误是因为M的范围大于1e5,我把数组开到1e6就能过AC代码#include<bits/stdc++.h>using namespace std;const int N = 1e6+9;int p[N];int find(int x){ if(x!=p[x]) p[x]=find(p[x]); return p[x];}void merge(int a,int b){ a=find(a),b=fi原创 2021-09-30 20:57:17 · 134 阅读 · 0 评论 -
1012 The Best Rank (25 分)——测试点2分析(坑点)
题目链接分析这道题思路就是结构体排序,但是超级坑。如果成绩是90 90 80 70的话,那么排名应该是1 1 3 4,真的超级无语AC代码#include<bits/stdc++.h>using namespace std;const int MAXN=1e5+9;#define N MAXNstruct node{ string id; int x; bool operator<(const node &t) const { return x&原创 2021-09-30 20:15:24 · 271 阅读 · 0 评论 -
NC19427 换个角度思考——思维+树状数组/线段树
题目链接思路这道题思路挺新奇的,树状数组维护前缀和。先存下输入的每个询问,再按照k的值从小到大排序。对于a数组开一个结构体数组,存下下标和值,按照值从小到大排序。对于每一个kik_iki,将小于等于kik_iki的值的位置add 1。然后这个询问的答案就是ask® -ask(l-1)。因为已经按照k从小到大排序了,所以之前插入的k对之后没有影响AC代码#include<bits/stdc++.h>#define lp p<<1#define rp p<<原创 2021-09-24 16:52:14 · 166 阅读 · 0 评论 -
The 2021 ICPC Asia Regionals Online Contest (I) 部分题解
终究还是太菜,后面慢慢更新,只做了4题,如果有高数书应该可以5题的。反正还是菜!!!文章目录III题没什么好说的,好像许多人理解错题意了。我们队一发过的,看看代码即可#include<bits/stdc++.h>using namespace std;const int N = 2e5+9;int a[N];int main(){ int t=0; int x; while(~scanf("%d",&x)) { a[t++]=x; }原创 2021-09-19 18:50:31 · 1162 阅读 · 0 评论 -
ACM竞赛 错误理解,坏习惯,定势思维纠正——血泪史
文章目录关于二分答案的定势思维纠正关于二分答案的定势思维纠正以前有风险的做法,二分后才记录答案 while(l<r) { ll mid=(l+r)>>1; if(check(mid)) { // ans=mid; r=mid; } else l=mid+1; } cout<<l<<endl;正确做法,二分的时候就记录答案 ll ans; while(l<=r) { ll mid=原创 2021-09-13 11:11:10 · 163 阅读 · 0 评论 -
ACM竞赛有趣题目
以下收集了本人刷题比赛过程中遇到的很有意思,锻炼思维,技巧的题目AtCoder Beginner Contest 217 E - Sorting Queries AtCoder Beginner Contest 217 D - Cutting Woods原创 2021-09-08 09:17:09 · 3125 阅读 · 0 评论 -
AtCoder Beginner Contest 217 E - Sorting Queries
题目链接思路对于1,2两个操作可以用队列q,简单的模拟即可,关键是第3个排序操作。 我们可以这样,开一个优先队列pq,对于插入操作,直接插入q对于排序操作,我们将q中的元素全部插入到pq中,我们可以肯定的是对于每 一次排序操作,这些数字肯定在后来插入的数之前(未进行下一次排序操作的时候是),前面有序,后面无序,所以对于操作2,如果优先队列里面有元素,那么输出弹出优先队列对头,否则弹出普通队列队头。#include<bits/stdc++.h>using namespa原创 2021-09-08 09:15:00 · 175 阅读 · 0 评论 -
2021牛客暑期多校训练营10 F题
题目链接文章目录思路AC代码思路这道题很关键的在于将栈中的序列转为树结构,每一个入栈后的序列不同转为对于每一个父节点,他的孩子节点的颜色不能相同AC代码#include<bits/stdc++.h>#define ll long long#define endl '\n'using namespace std;#define pii pair<int,int> #define N 2000000+9#define mem(a,b) memset(a,b,size原创 2021-08-18 20:35:19 · 64 阅读 · 0 评论 -
2021牛客暑期多校训练营8——D,注释详解
题目链接思路我想大家都看了很多题解知道这道题的切入点是c[i]=a[i-1]+a[i]=a[i-1] | a[i] a[i-1]&a[i],然后取看a1的第i位可以取0还是1,或者都可以取,只是对具体操作很迷,那么请看下面的注释!AC代码#include<bits/stdc++.h>#define ll long longusing namespace std;const int N = 1e5+9;int b[N],c[N],d[N]; int main(){原创 2021-08-10 23:09:02 · 130 阅读 · 0 评论 -
Codeforces Round #736 (Div. 2)——C题解
Codeforces Round #736 (Div. 2) C思路觉得做法很神奇,感觉不难,就是自己没想到,写个题解记录一下。对于这道题,我们首先肯定的是,如果与一个点相连的另一个点,比它大,那么它一定会被删除,所以我们维护一下哪些点与比它大的点相连。我们记录这些点的入度,in[i]。初始时,对于给出的边u,v(u>v) ,那么v一定会被删除,in[v]++,在这之前判断当in[v]=0时,ans- -(ans初始化n),因为你一个点只能删除一次嘛。对于加边操作,1,u,v(u>v原创 2021-08-08 11:17:26 · 149 阅读 · 0 评论 -
Codeforces Round #735 (Div. 2)——C
Codeforces Round #735 (Div. 2)文章目录思路AC代码思路设xxx为0~m中的任意一个数字,x⨁n=kx \bigoplus n=kx⨁n=k, 现在求x⨁nx \bigoplusnx⨁n的结果中未出现的最小非负整数。根绝异或运算的性质,n⨁k=xn \bigoplus k=xn⨁k=x, 对于所有出现的数字k,异或上n后的范围都在0~m之间,那么我们要找的未出现的最小非负整数异或上n后的范围肯定>=m+1,所以现在问题等价于寻找一个最小非负整数k,使得k⨁n≥原创 2021-07-30 19:23:06 · 93 阅读 · 0 评论 -
Codeforces Round #734 (Div. 3)——B2
Codeforces Round #734 (Div. 3)文章目录题意思路代码总结题意给你n个数字,和k种颜色,现在给这n个数字上色,每个数字可以不涂色k种颜色必须都用到,且每种颜色用到的数量相同相同的数字颜色不能相同尽可能多的涂色思路首先我们肯定,如果某种数字的个数超过了k,那么超过的部分一定不能涂色 。然后现在我们用结构体存储每种数字,和它的下标,超过的部分不存储。现在我们对存储过的数字,进行染色。假设现在有tt个数字,我们将这些数字按照值从小到大排序(从大到小也行),按照题.原创 2021-07-28 15:59:48 · 57 阅读 · 0 评论 -
2021牛客暑期多校训练营2部分题解
比赛链接文章目录I题意思路代码K题意思路代码I题意给出20*20的地图,叫你求一个指令序列。使得A按照这个指令能够到达目的地,并且B在镜像中也能够到达目的地思路这道题明明思路不难,但是当初就是没写出来,因为犯了一个很xx的错误,唉,还是搜索写少了。注意,字符串存储最好从1开始,并且char数组开大一点,因为这样的判断后,可能入队的nx,ny是<=0的,或者>20的。我就是犯了这个错误,一直没调出来就是两人一起出发,A,B可以一起走,也可以只用一个人走。最后bfs搜出来一个最短序列原创 2021-07-26 10:50:04 · 218 阅读 · 0 评论 -
2020-2021 ACM-ICPC, Asia Nanjing Regional Contest (XXI Open Cup, Grand Prix of Nanjing) ——K签到
题目链接思路首先我们知道gcd(i,i+1)=1(1≤i)gcd(i,i+1)=1(1\leq i)gcd(i,i+1)=1(1≤i), 恒成立。 那么题目要求要有k个共素,例如1,2,3,4,5 ,k=3,我们直接把1放在位置k上,然后2,3前移,即可2,3,1,4,5注意gcd(1,i)=1gcd(1,i)=1gcd(1,i)=1,所以kkk至少为1代码#include<bits/stdc++.h>using namespace std;int main(){ int原创 2021-07-20 12:32:36 · 592 阅读 · 0 评论 -
UVA11020 Efficient Solutions——multiset+思维
题目传送门文章目录题意思路代码题意对于集合SSS中的点A(xa,ya)A(x_a,y_a)A(xa,ya), 不存在另一个点B(xb,yb)B(x_b,y_b)B(xb,yb), 使得xb≤xa且yb<yax_b\leq x_a 且 y_b < y_axb≤xa且yb<ya 或者 xb<xa且yb≤yax_b < x_a 且 y_b \leq y_axb<xa且yb≤ya,那么我们称A为优势点现在有n个点,每个点动态的插入集合S中,求集合原创 2021-07-16 10:21:15 · 86 阅读 · 0 评论 -
Codeforces Round #715 (Div. 2) B. TMT Document——思路分析,清晰易懂
题目链接文章目录题目大意:思路AC代码题目大意:能否把只含T和M的字符串分成,若干个TMT的子序列,原字符串长度是3的倍数思路我们看TMT这个串,M前面要有一个T,M后面也要有一个T,并且 cnt(T)=2*cnt(M)那么我们从前往后遍历一遍,看每一个M的前面能否各自匹配到一个T。光是这样还不行,我们还需要从后往前遍历一遍,看每一个M后面能否各自匹配到一个T这样对于每一个M的前后,都有一个单独的T与它匹配,这不就是TMT了吗,同时要判断cnt(T)是否等于2*cnt(M)AC代码.原创 2021-04-17 10:05:48 · 208 阅读 · 3 评论 -
104. 货仓选址——绝对值不等式的运用,中位数巧用
题目链接文章目录题解AC代码注意题解|a-x|+|b-x|>=|a-b|当只有a,b两个商店时,仓库建在a,b之间可以取得最小值扩展到n个物品的时候当n为偶数时,ans=|x-a1|+|x-an|+|x-a2|+|x-an-1|…,>=|a1-an|+|a2-an-1|两两配对,x必须在a1,an中间,a2,an-1中间…,x可以取an/2或者an/2+1当n为奇数的时候,同理除了中位数那个其他两两配对,当x位于中位数时取得最小值AC代码#include<bits/原创 2021-03-12 16:48:18 · 255 阅读 · 0 评论 -
2872. 子串分值和——第十一届蓝桥杯省赛第二场C++B组
题目链接文章目录题解:代码题解:细心观察可以发现,对于字符串s, 每个s[i]对答案的贡献为,(i-pre[i])*(n-i+1 ,pre[i]表示,s[i]上一次出现的位置代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5+9;int pre[N];int tmp[30];char s[N];int main() { for(int i=0; i<原创 2021-03-11 16:50:24 · 325 阅读 · 0 评论 -
Educational Codeforces Round 105 (Rated for Div. 2) B. Berland Crossword ——赛后题解
题目链接题意:相信大家都知道题意思路这道题,如果u,r,d,l都<=n,那么则是YES.如果一个边要求涂n个,那么它的两个领边>=1, 如果要求涂n-1个,那么它的两个领边至少一个>=1,我们采用dfs枚举,即可这里的u,r,d,l,采用数组来存,更加方便如果还没懂,可以看看代码,很容易懂的AC代码#include<bits/stdc++.h>using namespace std;#define mem(a,b) memset(a,b,sizeof a)原创 2021-03-03 10:45:02 · 277 阅读 · 2 评论 -
Codeforces Round #701 (Div. 2) C. Floor and Mod(思维+数学)
题目题解:设余数为k, 由题意,可以很容易推出a,b,k的关系式子a=k(b+1)显然b>=k+1,那么a>=k*(k+1+1)=k(k+2),那么我们枚举每一个余数k,这样O(sqrt(n))的做法可以通过对于每一个k,我们计算b的最小值minb=k+1,b的最大值maxb=min(b,x/k-1), 在[minb,maxb]区间内的b都是可行的,因为,b=a/k-1, 显然k固定,所有可行的b都是连续的,直接加上就行了注意,我们不能计算a的最大最小值,a=k(b+1),显然,如果原创 2021-02-13 16:19:05 · 1128 阅读 · 0 评论 -
Codeforces Round #701 (Div. 2) B. Replace and Keep Sorted (思维+前缀和)
题目链接题解相信暴力的做法大家都会(超时),我们这里讲如何利用前缀和的做法再给定的数组里面,我们统计每个数对答案的贡献,并且计算前缀和b[i] = a[i+1]-a[i-1]-2; b[i]+=b[i-1];再给定的询问区间里面,因为去掉了左右限制,我们先统计(l,r)开区间对答案的贡献再统计,左端点对答案的贡献,再统计右端点对答案的贡献 ans+=b[r-1]-b[l];//这里应该是统计(l,r)开区间的贡献 ans+=(k-a[r-1]-1);//再统计最左边原创 2021-02-13 15:01:43 · 379 阅读 · 2 评论 -
Codeforces Round #700 (Div. 2) B. The Great Hero (大意wa了12次)
题目点这里文章目录题解AC代码题解题目问hero能否杀死所有的怪兽刚开始想简单了,我以为不用排序直接,一个一个的看这样就死在了这样的样例2 2 22 12 2hero攻击力为2,生命值为 2,第一个怪兽攻击力2,生命力2。第二个怪兽攻击力1,生命力2.。 如果不排序,那么hero杀死第一个怪兽后自己也牺牲了,就不能杀死所有的怪兽。所以我们需要按照,怪兽的攻击力从小到大排序,如果攻击力相同则生命力小的在前面,采用这种贪心策略能过AC代码#include<bits/stdc++原创 2021-02-08 10:33:27 · 223 阅读 · 0 评论