- 博客(11)
- 收藏
- 关注
原创 GPA
GPA 解题思路:dp[i][j],表示对于前i个数有j个sad的最小和。保证是最小和,可以使sad的个数越少。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double lf; typedef pair<int,int>P; const int inf = 0x7f7f7f7f; const double INF = 1e16; const int N = 1e4+1
2020-12-27 00:52:58 114
原创 P3052 [USACO12MAR]Cows in a Skyscraper G
P3052 [USACO12MAR]Cows in a Skyscraper G 解题思路:状压DP.dp[i]表示i的二进制为1的对应的第几个数,需要最少几个分组。r[i]表示在i二进制的状态下,最后一个分组还剩余的空间。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double lf; typedef pair<int,int>P; const int inf =
2020-12-22 17:05:48 233
原创 P1433 吃奶酪
P1433 吃奶酪 解题思路:dp[i][k],假设k的二进制是01011,表示从i点出发,走过的点有1、2、4的最短距离。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double lf; typedef pair<int,int>P; const int inf = 0x7f7f7f7f; const double INF = 1e16; const int N =
2020-12-21 17:18:57 130
原创 F. The Treasure of The Segments
F. The Treasure of The Segments 解题思路:排序之后,二分查找第一个大于等于a[i]-k,并且保证之间的距离相差最少为m,求C(个数,m-1)。 https://codeforces.com/contest/1462/problem/F
2020-12-18 17:37:05 276 1
原创 Gitignore
Gitignore 解题思路:这题对于我来说,一开始我不知道怎么可能有重名的文件夹区别分开。后来想到可以记录路径。记录路径也是有技巧的,需要加上“/” #include<algorithm> #include<cstring> #include<cstdio> #include<map> #include<string> #include<vector> #include<iostream> using namespace
2020-12-15 15:46:41 53
原创 字符串魔法(hard)
字符串魔法(hard) 解题思路:a数组和b数组分别计算字符串中’A’的前缀和,与’B’的后缀和。ret用来计算字符串s的前缀和,对于一个没有出现过的前缀和就记录他的下标,如果后面还出现这个前缀和,则说明这段区间的’A’和’B’的个数是相等的,然后再加上左边的A和右边的B就可以了。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double lf; typedef pair<i
2020-12-10 20:40:50 371
原创 D. Returning Home(建图+最短路)
D. Returning Home 解题思路:这题主要是建图。首先从起点开始到其余的m个点的最短路应该是min(abs(sx-x),abs(sy-y)),因为当到了与第i个点有x或者y相等的时候,是可以一下就跳到。从这m个点到达终点的路径长度应该是abs(x-tx)+abs(y-ty),因为这不可以一下就跳到。而这m个点可以分别以x最近的相连接和以y最近的相连接。假设三个点x,y,z在一条直线上,x到z的最短路,应该是x到y的最短路+y到z的最短路,这是二维坐标,所以不可能更短。建图完成之后,就可以跑dij
2020-12-04 17:15:28 303
原创 C. Bargain
C. Bargain 解题思路:我是参考着这张表,又推了一下。 其实就是考虑对于第i个数。如果保持在第i的这个位置上,那么从i~n这些位置是不能删除的,所以只能删除前面的。如果对于第i个数不在第i的这个位置上,那么就要考虑可能在i+1,i+2…n这些位置上,因为只能删除连续的,所以第i个数在后面的位置上,的出来的个数也是又规律的。 https://www.cnblogs.com/likunhong/p/13773622.html #include<bits/stdc++.h> using na
2020-12-02 20:18:13 291
原创 B. Nice Matrix
B. Nice Matrix 解题思路:这题看一下样例,就知道四个角应该相等,所以可以直接取这四个数的中位数,我一开始取的是平均数,怎么算都不对。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double lf; typedef pair<int,int>P; const int inf = 0x7f7f7f7f; const int N = 1e2+10; const
2020-12-02 13:26:14 213
原创 P1714 切蛋糕(线段树+前缀和)
P1714 切蛋糕 解题思路:求连续区间不超过k的最大值。先求出前缀和,线段树维护前缀和,在一个长度为k的区间,找到前缀和最小的,用最后的值减去这个值,得到的就是在这个区间里的最大值。如果长度不能到达k,从1寻找就可以了。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double lf; typedef pair<int,int>P; const int inf = 0
2020-12-01 19:42:52 148
原创 D. Sequence and Swaps
D. Sequence and Swaps 解题思路:因为n的范围是500,可以枚举,将a[i]与x替换,对形成的b数组排序,判断a数组能否转化成b数组。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double lf; typedef pair<int,int>P; const int inf = 0x7f7f7f7f; const int N = 1e5+10; c
2020-12-01 15:11:50 326
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人