洛谷
Rachel caramel
这个作者很懒,什么都没留下…
展开
-
F1. 生活在树上(easy version)树,dfs
树、dfs原创 2022-11-27 19:11:00 · 470 阅读 · 1 评论 -
P8198 [传智杯 #4 决赛] 背单词的小智 二分答案+前缀和
二分答案原创 2022-11-27 19:05:45 · 295 阅读 · 0 评论 -
P8842 [传智杯 #4 初赛] 小卡与质数2 垃圾筛
垃圾筛原创 2022-11-22 19:56:53 · 602 阅读 · 0 评论 -
P2347 [NOIP1996 提高组] 砝码称重 dp(01背包)
题目:思路:把砝码一个个列出来,成为一个数组,然后做选择(选或者不选)需要注意的是需要从1000开始查询vis[i]是否可行代码:#include <iostream>#include <cstdio>using namespace std;const int maxn=1111;int n,a[maxn],b[11]={0,1,2,3,5,10,20};bool vis[maxn];int main(){ for(int i=1;i<=6;i原创 2022-05-18 13:56:06 · 184 阅读 · 0 评论 -
P1801 黑匣子 二叉堆,优先队列
题目:思路:参考AC代码:#include <bits/stdc++.h>using namespace std;const int maxn=211111;int n,m,a[maxn],u[maxn];priority_queue<int> q1;priority_queue<int,vector<int>,greater<int>> q2;int main(){ cin>>n>>m;原创 2022-04-02 22:00:34 · 451 阅读 · 0 评论 -
P1168 中位数 大根堆 小根堆
题目:思路:把小的数放在大根堆里,大的数放在小根堆里属于一旦想到了就会豁然开朗的题目如果找的是第k个大的只需要一个小根堆即可AC代码:#include <bits/stdc++.h>using namespace std;const int maxn=111111;int n,a[maxn];priority_queue<int> q1;priority_queue<int,vector<int>,greater<int>>原创 2022-04-02 21:15:50 · 390 阅读 · 0 评论 -
P1404 平均数 二分答案
题目:思路:答案的范围很容易确定,重要的是check()这一步搞一个b[i]=100*a[i]-avg;s[i]是b[i]的前缀和数组AC代码:#include<cstdio>#include <iostream>#include<cstring>#include<algorithm>#include <vector>#include <cmath>#include <queue>using na原创 2022-03-21 18:53:50 · 229 阅读 · 0 评论 -
P2678 [NOIP2015 提高组] 跳石头 二分答案
题目:思路:依旧是对答案可能的范围进行二分,然后代入并求取需要搬掉多少石头。AC代码:#include<cstdio>#include <iostream>#include<cstring>#include<algorithm>#include <vector>#include <cmath>using namespace std;const int maxn=111111;int d,n,m,a[maxn]原创 2022-03-20 20:44:31 · 291 阅读 · 0 评论 -
P1182 数列分段 Section II 二分答案
题目:思路:把x可能的范围先确定下来,0-1e13接着对这个范围进行二分处理,判断mid是否大于等于xAC 代码:#include<cstdio>#include <iostream>#include<cstring>#include<algorithm>#include <vector>#include <cmath>#include <queue>using namespace std;co原创 2022-03-20 19:49:35 · 182 阅读 · 0 评论 -
P1144 最短路计数 最短路,bfs(回顾
题目:思路:如果从1开始到x1,和x2的距离(x1,和x2和y相连)相同。那么1->y的最短路的数目=1->x1的最短路数目+1->x2的最短路数目代码说明:dis[i]表示1-i的最短路的距离;AC代码:#include<cstdio>#include <iostream>#include<cstring>#include<algorithm>#include <vector>#include <c原创 2022-03-16 22:55:12 · 206 阅读 · 0 评论 -
P1522 [USACO2.4] 牛的旅行 Cow Tours 最短路+并查集
题目:思路:题目要求的是加上一条边,连接两个连通块之后,形成的新连通块的最小直径。A连通块与B连通块连接后形成的新连通块的最小直径有三种情况:1.A连通块的直径2.B连通块的直径3.d[i]+d[j]+getdis(i,j)并查集用于分成不同的几个连通块最短路(floyd)用于寻找多源最短路,连通块里点与点直接的“距离”d[i]用于存储i所在的连通块里,与i所在的最长直径a数组用来储存一个连通块里的最长直径AC代码:#include <cstdio>#includ原创 2022-03-16 21:25:07 · 300 阅读 · 0 评论 -
P1629 邮递员送信 最短路(一对多,多对一
题目:思路:这道题先是原创 2022-03-16 10:09:43 · 217 阅读 · 0 评论 -
P1119 灾后重建 最短路 floyd算法
题目:思路:一看这道题就是个多源最短路问题,考虑采用floyd算法如果每次都用一次floyd,显然大数据会tle所以先一遍把所有的情况都算出来,后面再去调用如果day不是递增的数组,需要先排序AC代码:#include<cstdio>#include <iostream>#include<cstring>#include<algorithm>#include <queue>#include <vector>原创 2022-03-15 10:47:22 · 185 阅读 · 0 评论 -
P4779 【模板】单源最短路径(标准版) 最短路
题目:思路:把优先队列的做法改个数据范围就可以了AC代码:#include<cstdio>#include <iostream>#include<cstring>#include<algorithm>#include <vector>#include <cmath>#include <queue>using namespace std;const int maxn=111111;struct n原创 2022-03-14 21:18:37 · 287 阅读 · 0 评论 -
P3371 【模板】单源最短路径(弱化版) 最短路
题目:思路:模板题,练习一下Dijkstra 算法(需要注意的是边权不能是负数暴力算法:#include<cstdio>#include <iostream>#include<cstring>#include<algorithm>#include <vector>#include <cmath>using namespace std;const int maxn=51111;const int anss=(原创 2022-03-14 20:58:36 · 705 阅读 · 0 评论 -
P2822 [NOIP2016 提高组] 组合数问题
题目:思路:如果纯暴力,把所有小于2000并且%k的组合数都求出来,能拿个90分改进方案,可采用前缀和的方法二维的组合数的求法a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]前缀和这里还需要注意以下两个点:1.如果当前的点能够整除k,ans[i][j]得另外+12.因为组合数c(n,m)里的m小于n(n个里取m个),所以在求前缀和的过程中c[i-1][j]可能不存在,为了避免这种情况影响答案,每次都把c[i][i+1]=c[i][i]AC代码:#in原创 2022-03-11 13:37:36 · 368 阅读 · 0 评论 -
P3913 车的攻击
题目:思路:不考虑数据范围的情况下,考虑先计算出没有被攻击到的格子,数量=未被被标记的x*未被被标记的y可以搞个bool数组来记录x是否被标记过对应代码:#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int maxn=111111111;int n,k;bool visitedx[maxn],visitedy[maxn];int原创 2022-03-07 09:17:51 · 97 阅读 · 0 评论 -
P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G 贪心 二叉堆 优先队列
题目:思路:主要是通过这道题目学习一下二叉堆和优先队列用priority_queue来实现二叉堆(大顶堆和小顶堆)注意要加头文件 #include <queue>默认为大顶堆 priority_queue<int> q 小顶堆 priority_queue<数据类型,vector<数据类型>,greater<数据类型>> qeg:priority_queue<int,vector<int>,greater<i原创 2022-03-06 11:58:23 · 244 阅读 · 0 评论 -
P1028 [NOIP2001 普及组] 数的计算
思路:要A这道题的关键应该在于,想清楚a[i]的含义,以及自行举例a[i]=?才是对的。一开始的问题在于想不清楚a[i]的含义,在那边瞎搞,后面又把a[4]想成了3(4、24、124,忽略了14的情况,察觉到这个之后就恍然大悟了)a[i]的含义:把i当成n之后的计算结果最后的答案只需要把小于等于n/2的a[i]都加起来#include <cstdio>#include <iostream>using namespace std;int n,a[1111];lon..原创 2021-09-08 15:14:51 · 77 阅读 · 0 评论 -
P1080 [NOIP2012 提高组] 国王游戏
思路:第一个想法马上是dfs,但是看了数据范围显然会wa虽然知道按左手上的数排序不是正解但是还是写了一些,拿了50分左手和右手的比值也显然不对(但是没尝试两者乘积#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;long long n,a,b,product;long long ans=-0x3...原创 2021-09-01 13:37:39 · 245 阅读 · 0 评论 -
P4995 跳跳!
思路:应该想到了就不难,只要先把数组排序,然后在数组的没有跳过的石头上,反复跳来跳去就可以#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;int n,a[1111];long long ans;int main(){ cin>>n; for(int i=1;i<=n;i++...原创 2021-08-28 10:51:01 · 80 阅读 · 0 评论 -
P1208 [USACO1.3]混合牛奶 Mixing Milk
100 55 209 403 108 806 30思路:这道题和陶陶摘苹果没有什么区别,直接A掉了#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;int n,m;long long ans;struct NUM{ int p,a; bool operator<(const NU..原创 2021-08-27 19:41:35 · 85 阅读 · 0 评论 -
P1478 陶陶摘苹果(升级版)
8 1520 130120 3150 2110 7180 150 8200 0140 3120 2思路:呜呜呜太难得了,一遍过。根据所需要的力气对这些苹果排序然后如果能够到就摘#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;int n,s,a,b,cnt;struct NUM{...原创 2021-08-27 19:20:14 · 92 阅读 · 0 评论 -
P1106 删数问题
思路:确认过眼神,是卡了很久的题大体思路是对的,在保证后面有足够数的情况下,选择最小的数刚开始写的时候存在很多问题这一块代码是改的最久的,刚开始自己随便测了几组数发现了问题之后,发现这里的i忘记重新赋值了,然后又发现应该赋值为-1而不是0,因为之后会先进行++的操作。最后就是关于这道题目的理解问题,我一直认为留下来的数字如果是000001(前导零去掉)这种应该是不可行的,然后通过测试发现题目要的就是这个。存在歧义的情况下可以把两种情况都是试一试。在这里插入代码片#include <c..原创 2021-08-27 16:55:00 · 111 阅读 · 0 评论 -
P3817 小A的糖果
思路:一开始的思路就是相邻的两个数,在需要拿出糖果的情况下,尽量从后面拿,这样可以保证下一次需要拿出的糖果最小(在后面那份糖果被拿走的情况下才拿前面的那份我一开始没有将每次的和存下来而是直接在里面计算ans,这样导致后面所计算的是前面的差之和,而不是当次的差(这里的差都指相邻两个数相加与x的差#include <cstdio>#include <iostream>#include <algorithm>using namespace std;long ...原创 2021-08-25 21:07:27 · 151 阅读 · 0 评论 -
P1803 凌乱的yyy / 线段覆盖
思路:这道题一开始我考虑的是根据时间来排序,随便几个例子就能发现这个很不合理然后考虑排序左端点的情况下+时间(这也比较容易出问题,比如第一个点的的时间跨度特别长,后面的时间都比较短除去左端点,那么只剩下右端点了,为什么考虑右端点呢?首先右端点是结束的时间,结束的早,后面留下的时间就相对多根据右端点进行排序的情况下,只需要保证上一个结束的时间比下一个开始的早就可以参加最多次数的比赛#include <cstdio>#include <iostream>#inclu...原创 2021-08-25 16:29:14 · 160 阅读 · 0 评论 -
P1223 排队接水
输入:1056 12 1 99 1000 234 33 55 99 812思路:一眼看过去也是很明显的贪心了(铁定要排序拍完序之后,我一开始想的是,后面那个人等待的时间等于前面那个人等待的时间+前面的人接水的时间,那么只要每次*2+1就可以了。(但是这种情况,是只要把等于前面那个人等待的时间乘2而不是前面所有人等待的时间乘二,用这种方法会显得很麻烦其实很简单,第一个人接水的时间有九个人在等,第二个人接水的时间有八个人在等,以此类推,并且加起来就行#include <cstdio&g..原创 2021-08-24 22:18:09 · 330 阅读 · 0 评论 -
P2240 【深基12.例1】部分背包问题
输入:4 5010 6020 10030 12015 45思路:这道题因为金币是随意分割的,所以是很显然的贪心,依次把剩下的里面单位重量价值最高拿走就可以了#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int n;double ans,t;struct GOLD{ double m,v,a; bool operator<(c..原创 2021-08-24 21:07:46 · 108 阅读 · 0 评论 -
P1102 A-B 数对
思路:1.刚开始想到的是把每个数字有多少个存下来,由于题目的数据问题,所以不可行可以根据二分法算出某个数字出现第一次的位置和最后一次的位置,接着把每个数字的多少个在中间算出来,直接加到ans上,下一次从下个数字开始算(虽然每个数都在int里,但是个数的乘积可能会超出Int,所以要开long long#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int..原创 2021-08-23 15:54:18 · 260 阅读 · 0 评论 -
P2249 【深基13.例1】查找
输入:11 31 3 3 3 5 7 9 11 13 15 151 3 6思路:首先考虑暴力做法,直接两个for的遍历,复杂度为O(n²),显然tle(若数据范围小一点或许可行然后就是考虑二分法了,需要注意的是这道题需要输出的是第一次出现的编号,所以在设置条件时特别需要注意就当我以为一切都稳了的时候,我被卡了一个多小时,原因竟然是我搞不清楚十的六次,应该开成a[1111111]而不是a[111111]#include <cstdio>#include <iostrea..原创 2021-08-23 14:05:37 · 187 阅读 · 0 评论 -
P3799 妖梦拼木棒
思路:1.四根火柴棒分别为:a、b、a+b、a+b2.一开始的想法就是,直接暴力算,样例能过,但是很明显太慢了直接re+tle#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int n,a[11111],ans[111];int cnt=0;void search(int m,int l){ for(int i=1;i<m;i++) {.原创 2021-08-18 18:13:24 · 140 阅读 · 0 评论 -
P2036 [COCI2008-2009#2] PERKET
思路:1.dfs的改编,看了人家写的然后理解了好一会儿#include <cstdio>#include <iostream>#include <cmath>using namespace std;long long n;long long a[11],b[11],ans;void dfs(long long cnt,long long x,long long y){ if(cnt>n) { if(x==1&&y==...原创 2021-08-18 18:12:36 · 132 阅读 · 0 评论 -
P2392 kkksc03考前临时抱佛脚
思路:1.这道题要求的其实是最大值的最小值问题2.for(int i=q;i<=n;i++)减少重复#include <cstdio>#include <iostream>using namespace std;int s1,s2,s3,s4,a[111];bool vis[111];int ans,ans1,ans2,anss,num;void dfs(int m,int n,int q){ ans=min(ans,max(ans1,ans2));...原创 2021-08-18 18:11:59 · 130 阅读 · 0 评论 -
P1149 [NOIP2008 提高组] 火柴棒等式
思路:1.先把每个数字对应的火柴棍个数存起来2.加号和等号需要消耗4根火柴3.通过结果敲定大概范围(我刚开始写了1000,然后测试发现结果有问题再改成2000的)#include <cstdio>#include <iostream>using namespace std;int n,num[2111]={6,2,5,5,4,5,6,3,7,6};int cnt=0;int main(){ cin>>n; for(int i=10;i<...原创 2021-08-18 18:13:47 · 515 阅读 · 0 评论 -
P1217 [USACO1.5]回文质数 Prime Palindromes
思路:1.回文+质数先把回文的都找出来然后判断是否是素数2.回文质数一定不会是偶数位个(两位数除外),一定可以整除113.先确定输进来的数字是几位数,然后再一次判断4.在开始的时候先判断一下是否是2的倍数(不然运行速度太慢#include <cstdio>#include <iostream>using namespace std;int a,b,c,cnt;int s[11];bool checkhuiwen(int a,int cnt){ int ...原创 2021-08-17 14:09:57 · 92 阅读 · 0 评论 -
P3654 First Step (ファーストステップ)
思路:先找到空地,然后往右和下两个方向分别找一找有没有k个位置1的情况单独处理#include <cstdio>#include <iostream>using namespace std;int r,c,k,ans;char s[111][111];void check(int a,int b){ int cnt=1; for(int i=b+1;i<=c;i++) { if(s[a][i]=='.') { cnt++; if...原创 2021-08-17 13:57:06 · 106 阅读 · 0 评论 -
P3392 涂国旗
思路:没啥别的,把每一种情况都算一算,然后输出最小的就成#include <cstdio>#include <iostream>using namespace std;int n,m,cnt,ans[1111111],result;char s[111][111];void check(int begin,int end,char A){ for(int i=begin;i<=end;i++) { for(int j=1;j<=m;j++)...原创 2021-08-17 13:23:24 · 189 阅读 · 0 评论 -
P1088 [NOIP2004 普及组] 火星人
思路:1.一开始我是想着全部存下来的,然后就tle了->改为把从给出的顺序开始全存下来,依旧不行->最后改成如果遇到题目给出的顺序做个标记,然后开始cnt2.然后需要解决的就是怎么判断是否一致的问题用same[]数组判断当前位是否一致用same1[]数组记录到1-n位是否都一致#include <cstdio>#include <iostream>#include <cstring>using namespace std;int ...原创 2021-08-17 10:13:26 · 256 阅读 · 0 评论 -
P1706 全排列问题
因为这道题开始接触dfs的#include <cstdio>#include <iostream>using namespace std;int n,depth,a[100],ans[100],vis[100];void dfs(int depth){ if(depth==n+1) { for(int i=1;i<=n;i++) printf("%5d",ans[i]); cout<<endl; return; } else {..原创 2021-08-17 09:15:17 · 84 阅读 · 0 评论 -
P1157 组合的输出
思路:1.这道题跟p1036思路差不多,都是选数2.唯一需要注意的点就是组合中数字是需要按升序排列如:321这种是不可行的`#include <cstdio>#include <iostream>using namespace std;long long n,r,a[21],vis[21];void dfs(long long depth){ if(depth==r+1) { for(int i=1;i<=r;i++) printf("%3d",...原创 2021-08-17 09:12:06 · 231 阅读 · 0 评论