
思维
一只谜谜怪
怀着永远进步的心,追逐希望与梦想
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AtCoder Beginner Contest 191 C - Digital Graffiti
思路:扫描所有’.'块,分4种情况计数。c++代码:#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 5;int a[maxn];int dx[] = {-1 , 1 , 0 , 0};int dy[] = {0 , 0 , -1 , 1}; char g[20][20];int h , w;int check(int r , int c , int t) { int cnt =原创 2021-02-07 18:41:47 · 717 阅读 · 0 评论 -
AtCoder Beginner Contest 188 D - Snuke Prime
思路:本来想的是直接给区间排序,后来发现太麻烦了,直接对每个点(一个区间有两个点)的贡献左区间计+c[i] , 负区间计-c[i] ,进行排序即可,每次访问下一个点的时候,首先计算i - 1 与 i 点之间的花费(此处与C进行比较,保证每天最多花C),把上一个点的贡献c[i - 1]计入新的c[i]。做到这里,本题还有一个关键点:若一个区间为[l , r],l点的贡献从它自己l位置开始起效,而r点从r + 1点才开始起效,因此记录点的贡献时,右边坐标应为r + 1。为什么呢?比如下面这种情况: [1 ,原创 2021-01-11 20:52:14 · 324 阅读 · 0 评论 -
Codeforces Round #663 (Div. 2) C. Cyclic Permutations(思维)
题目链接:传送门思路:可以先算无环的情况数,再用全部情况数减,算无环情况的关键点有两个:1)除了最大数n以外,每个数一定至少有一条边指向另一个数,当每个数只有一条边连出去时(共n-1条边),图是无环的,即只要有一个数连两条边出去就有环。2)对于特定的数i (i < n - 1 ),要保证无环,它两边的数已经被确定了,一边必须是(1) — (i - 1) , 一边是 (i+1) — (n),即只要对于前n-1个数,满足一边都是小于它的数,一边全大于,即可保证无环,其他情况均有环(因为会发出两条边原创 2020-08-10 08:42:31 · 906 阅读 · 0 评论 -
AtCoder Grand Contest 041 B - Voting Judges (前缀和)
题目链接:传送门思路:先对输入数组进行排序,排完存储前缀和,之和分析可以得到,对一个位置t要让它排到p位置首先需要对自己需要加m,再判断能否大于等于a[p],可以就继续,不可以则退出,然后a[p-1]以及之前的数组不受影响,a[t]之后的也不受影响,可以加m,剩下的最多加到m + a[t]即可,然后可以证明:只要加的值小于m*v,一定存在分配策略。代码:#include <bits/...原创 2019-12-31 00:17:35 · 382 阅读 · 0 评论 -
pat甲级 1067 Sort with Swap(0, i) (25 分) (思维)
题目链接:传送门思路:自己的瞎搞的假算法得了8分。。(这里就不贴了),然后看了题解,对于序列中的数字a[i],必定有数占用了他原来的位置,存在一条占用链:如:i 占用 j的位置,j占用k的位置,k占用i的位置。(占用链一定是一个环,应该可以证明)具体思路就是:因为只能用0交换,如果0不在自己的位置(则0占据了别的数的位置),先通过交换使它在0位置(与它交换的全部的数字都会回到自己的位置),然后...原创 2019-11-14 13:52:33 · 163 阅读 · 0 评论 -
pat甲级 1033 To Fill or Not to Fill (25 分) (思维 贪心)
题目链接:传送门思路:本来想dp,然后得了11分,因为没有考虑在前一个加油站可以加满油的情况。 首先每个位置取最小的油价保存,然后在计算时分两种情况,设当前位置为t。(1)前方有价格更低的加油站p,直接选取这个加油站p,然后记录走到这个加油站要花费的钱.(2)前方没有价格更低的加油站,为了到达需要选取一个价格相对最小的站p1,这里可以先在当前加油站t加满油,再去目标加油站p1,所以算的时候...原创 2019-11-12 17:00:49 · 244 阅读 · 0 评论 -
P2184 贪婪大陆(线段树 or 树状数组)
题目链接:传送门思路:一开始一直想使用线段树保存染色信息。。然而发现这种做法非常困难,,然后看了题解,使用树状数组或者线段树维护在位置x的区间起点数量前缀和suma[n]和区间终点数量的前缀和sumb[n]即可 , 比如一段区间[a , b]的炸弹种类就是sumb[b] - suma[a-1]。代码:(这里使用了线段树)#include <bits/stdc++.h>usin...原创 2019-11-05 17:29:42 · 250 阅读 · 0 评论 -
Educational Codeforces Round 74 (Rated for Div. 2) C. Standard Free2play(思维)
题目链接:https://codeforces.com/contest/1238/problem/C反思:比赛的时候已经想到做法了,但是没时间了,主要是读题读半小时。。题目大意:给出n个现形的块p1 - pn,人在高度为h的p1块上,而其实从1 - h高度的块都是存在的,只是有的隐藏了(人没法站在上面),只有n个给出的块是露出的,只有一个操作可以使人物下降到更低的块,这个操作会改变当前高度为h...原创 2019-10-09 20:33:36 · 286 阅读 · 0 评论