自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 Codeforces Round #716 Div.2 部分题解

这场难度比之前几场友好了许多。A. Perfectly Imperfect Array题意: 给出一个数组aaa,判断其是否存在一个子序列bbb使得bbb中的元素乘积不是平方数。若是,输出YES,否则输出NO。做法: 直接考虑单个元素即可。若aaa中元素有一个不是平方数,输出YES,否则输出NO。证明可以从质因子分解入手(考虑每个质因子次数的奇偶性,代码中判断是否是平方数也用的是质因子分解的方法)。#include <bits/stdc++.h>using namespace std;

2021-04-20 12:01:35 269 10

原创 Codeforces Round#715 Div.2 部分题解

依旧的思维场。A. Average Height题意: 给出一个数组,要求重新排列其中的元素,使得满足ai+ai+12\frac {a_i+a_{i+1}}{2}2ai​+ai+1​​是整数的iii尽可能多。做法: 很容易想到把奇数放一起,偶数放一起,就能使得满足要求的iii最多。#include <bits/stdc++.h>using namespace std;typedef long long ll;int n, a[2020], b[2020];int t;int m

2021-04-17 12:11:25 483

原创 Codeforces Round #714 部分题解

这场依旧质量很高,题目都有一种耳目一新的感觉。A. Array and Peaks题意: 一个下标iii被成为peak的条件是1<i<n,ai>ai−1,ai<ai+11<i<n,a_i>a_{i-1},a_i<a_{i+1}1<i<n,ai​>ai−1​,ai​<ai+1​。现给出一个数字nnn,要求构造一个peak数恰为kkk的排列。如果不能构造,输出-1。做法: 瞎搞。首先可以断定,2k+1>n2k+1>n2k+

2021-04-16 00:19:38 294 4

原创 Codeforces Round #711 部分题解

这场思维题都很巧妙,值得学习一波。A. GCD Sum题意: 给出一个数xxx,要求找到最小的n≥xn \ge xn≥x,使得gcd(n,digitsum(n))>1gcd(n, digitsum(n))>1gcd(n,digitsum(n))>1,digitsum(n)digitsum(n)digitsum(n)是nnn的各十进制数位之和。做法: 直接按题目说明,从xxx开始枚举即可,可以预见,运算次数不会很多。#include <bits/stdc++.h>usi

2021-04-14 23:43:10 148

原创 Codeforces Round #712 部分题解

部分题解A. Déjà Vu题意: 给出一个字符串,你可以选择一个位置插入一个字符a,能否找到一个位置插入后使得插入字符a之后新的字符串不是回文串?做法::乱搞,这里采取的办法是分别尝试在原字符串的最前面,原字符串第一个字符的后面,以及原字符串的最后面插入,如果有一种能成功,便输出,否则,输出NO。(其实后面想了以下应该只用试最前面和最后面即可,但没有确切的证明。)#include <bits/stdc++.h>using namespace std;typedef long lon

2021-04-14 00:20:34 178

原创 Codeforces Round#635 Div.2 解题

比赛时出了 A~C然后直接睡觉了。。A.给你a, b, c, d(非递减序列)四个数字,要求输出x, y, z,满足以下条件:x属于[a, b], y属于[b, c], z属于[c, d]以x, y, z为边长可以构成一个三角形保证解总是存在想法: 根据两边之和大于第三边瞎搞。。也容易想到去构造等腰等边等特殊三角形,比如 x = b, y = c, z = c, 等等。。如果这都满足不了...

2020-04-16 18:47:03 166

原创 Codeforces Round #616 Div.2 补题

A. Even But Not Even题意:给你一个超大整数,问你能不能通过删除在其中的一些数字,来使得它的各位数位数字和为偶数,但其本身是奇数删完之后的数字至少有一位,而且不能带前导0),多组用例,如果不能,输出-1,如果有多种答案,输出其中任意一个即可。输入44122710617701324222373204424185217171912输出1227-1...

2020-02-03 17:49:42 211

原创 牛客假日团队赛17 J题 守望者的逃离(动态规划 + 滚动数组优化)

看了好久才觉得是dp…用dp[i][j]来代表第i秒剩余j能量能走的最大距离。但直接这么设开数组时会MLE,所以得进行空间优化。另外本题要运用滚动数组法优化,但由于dp[i][j]和j的左右两边都有关系,所以我们不能直接省略掉一维,而是只保留最后两秒的状态,交上去直接就过了。。。#include <bits/stdc++.h>using namespace std;int d...

2019-10-02 21:18:58 141

原创 HDU Robberies(小数背包)

很有意思的01背包问题。可能会把给出的概率上限当做背包容量,但第一背包容量为小数,存在精度问题,第二,如果将概率上限当背包容量,背包容量的变化并不是简单的减法。于是采取将抢到的钱数作为背包容量的想法,dp[i]表示抢i块钱逃脱的最大概率。#include <bits/stdc++.h>using namespace std;double dp[10010];struct b{...

2019-09-28 10:20:31 667

原创 HDU 3732(01背包转多重背包)

这道题很有意思,N,C的数据量达到10000,如果用普通的01背包来做绝对会超时,注意到v和c只有0~10的范围,这说明有大量的v,c是重复的,相同的v,c的单词是等价的,这样就可以转化为多重背包来做。不过普通的多重背包又可能会超时,于是我们采取二进制优化的方式来优化成01背包问题。从01背包到多重背包又到01背包,的确是道好题。。#include <bits/stdc++.h>...

2019-09-28 09:51:44 150

原创 HDU 3033 I love sneakers!(分组背包)

典型的分组背包问题,用dp[s][j]代表选到第s组,背包容量为j时的最大价值,注意每个品牌都要选,注意更新dp时考虑一下第s个有没有选。#include <bits/stdc++.h>using namespace std;int dp[12][10010];struct shoe{ int no, p,v;};typedef struct shoe S;S SHO...

2019-09-28 09:03:54 124

原创 HDU 2456 饭卡(01背包)

比较模板的题。。。但是有坑我们求出m -5的预算下能达到的最大消费金额,然后再用剩下的钱去购买最贵的菜,这样得到的结果是最小的。。。当m < 5 时 直接输出结果。。这也比较坑。。#include <bits/stdc++.h>using namespace std;int dp[1010],p[1010],m,n;const int INF = 0x7f7f7f;...

2019-09-25 19:35:49 162

原创 牛客网 栗酱的异或和(博弈论)

博弈论初步。。基本上算裸的Nim问题。但注意必须从k堆开始取,之后就相当于一个Nim问题。NIM问题经典博弈论问题,奇异局势为所有的石子堆数量的异或和为0,在此局势下先手必败,反之,如果我们尽量给对手制造奇异局势,则必胜。由于除k堆以外的拿取是自由的,我们先求出它们的异或和,如果这个异或和小于第k堆的数量,我们便可以在第一步拿走第k堆的a[k] - sum个石子,留给对手奇异局势。如果异...

2019-09-25 14:17:09 288

原创 HDU 2141 二分法

比较模板的二分法。。。 先枚举前两个的和,然后在结果数组里二分查找x - c[i]#include <bits/stdc++.h>using namespace std;const int N = 520;int A[N],B[N],C[N],x;long long R[N * N];int main(){ int L,N,M,S,c = 0; while(~scan...

2019-09-25 13:23:46 144

原创 牛客假日团队赛16 J题 (矩阵连乘 DP)

题目描述得很清楚,就是一个矩阵连乘问题不过由于自己学艺不精。。没有搞清楚原问题的p[0]存的是第一个矩阵的行数,一直按p[1]存的。。。代码如下#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 100 + 10;int p[3 * N];ll dp[3 * N][...

2019-09-23 15:10:17 169

原创 HDU 3625 Examining the Rooms(第一类斯特林数)

本题是第一类斯特林数的典型题,若k把钥匙能全部打开的意思是,形成小于等于k个圆排列的数量,但注意1不能单独成排列,故在统计合法的排列数中应该减去。我们知道n把钥匙能形成的圆排列的数量是n!个,以此为分母即可。。。#include <bits/stdc++.h>using namespace std;typedef long long ll;ll F[30],str[30][30...

2019-09-20 10:10:49 122

原创 HDU 1160

最大上升子列问题。。先对w排序,然后就是求最大上升子列了。。注意w和v都是严格的大小关系。。。但是这道题麻烦的地方在于要输出路径。。。菜鸡不太会,于是借鉴了一下网上的代码。。。下为代码。。。#include <bits/stdc++.h>using namespace std;const int N = 1010;struct mouse{ int w,v,no;}...

2019-09-18 22:17:23 154

原创 HDU 1176 免费馅饼(逆向DP)

动态规划题。。。。。由于终点很多,但起点只有一个 考虑采用逆向DPdp[i][j]表示第I秒第j个位置能拿到的最多的馅饼数,类比数塔,易推得状态转移方城,最终答案即为dp[0][5]#include <bits/stdc++.h>using namespace std;const int N = 100000 + 10;int dp[N][12],a[N][12];//aij...

2019-09-18 20:38:52 157

原创 牛客网假日团队赛15 G Bulls and Cows

菜鸡比赛的时候没有想出来。。后来看了别的dalao写的代码恍然大悟。。和HDU 下沙的沙子有几粒有异曲同工之妙。。。若用dp[i]来表示i头牛合法组合数。。。那么可以是在i-1的合法组合上加上一头COW得到,也可以是在i- 1 - k的基础上加上一头公牛k头母牛得到。。。于是dp[i] = dp[i - 1] + dp[i - 1 - k]到了这还没有完 ,注意边界条件。。。当牛数量等于...

2019-09-17 19:32:14 127

原创 牛客网假日团队竞赛15 L题(Java大数+快速幂)

水题。。不解释。。就当练习JAVA了。。链接:https://ac.nowcoder.com/acm/contest/1088/Limport java.util.Scanner;import java.math.*;public class Main { public static void main(String []args) { Scanner i...

2019-09-14 11:19:19 167

原创 HDU Humble numbers(动态规划)

本题是一到不是那么典型的DP题目,其状态转移为第i个数乘上2,3,5,7,后刚好大于dp[i-1]的数中的最小者。。#include <bits/stdc++.h>using namespace std;typedef long long ll;ll dp[6000];int main(){ int two = 1,three = 1,five = 1,seven = 1...

2019-09-13 19:16:43 94

原创 HDU 1159 Common Subsequence

经典DP问题 话不多说上代码。。。#include <bits/stdc++.h>using namespace std;string x,z;const int N = 1000+10;int dp[N][N];int main(){ while(cin >> x >> z) { if(x == "" or z == "" ) cout ...

2019-09-13 17:41:48 83

原创 HDU 下沙的沙子有几粒?(递推)

写一下自己的思路历程。。1.类比leetcode的括号匹配,采用dfs(当H的数目大于D的数目且D的数目小于n时,在字符串尾增加一个D)当H的数目小于m时,在子串增加一个H;结束搜索的条件是D的数目等于n且H的数目等于m,结束时检查得到字符串是不是符合要求,如果是则ans++;最后输出ans结果是交上去血T;由此想到第二种做法,由于n,m都不大,最多209个测试用例,因此想到可以打表来做2...

2019-08-25 12:55:46 178

原创 HDU 1024 Maxsum+ (DP)

本题是前面MAXSUM的加强版,其实质是求一段数组的取出M个连续且互不相交的区间使得所有区间内的所有数相加之和最大。状态表示:dp[i][j]表示分为i组 选取前j个数所得的最大和。状态转移方程的推导有点意思,但想一想其实还是很简单;如果分为i组:可以是已将前j - 1个数分为i组的情况下加上第j个数,也可以已将前j-1个数分为i - 1组后,第j个数单独成组。但这样会超时,我们需要进行...

2019-08-16 21:23:25 80

原创 HDU rabbit and wolf

本来打算直接打表的,但看了看网上的解答觉得很有道理。如果n m互质,那么狼总能遍历完所有的洞,相反,则狼总有遍历不到的洞。#include <bits/stdc++.h>using namespace std;//本质上是求公因数问题,如果互质,那么狼转了很多圈后一定会遍历完所有的洞 int main(){ int T; cin >> T; while(T...

2019-08-01 20:22:07 116

原创 HDU 1422 重温世界杯(DP)

先马住,本质上是求子列的非负最大和。#include <bits/stdc++.h>#define N 200000+10using namespace std;int main(){ int n; while(cin >> n) { int a,b,c[N]; for(int i = 1; i <= n ; i++) { sc...

2019-07-29 10:00:47 172

原创 HDU 2571 命运(DP)

简单dp,状态转移方程题上已给出。。。但奇怪的一点是在找j的因子时,循环上限到了m?按理说j 应该就是前面的y*k,在y >=1时 k 应该<=j,而k >1,可能是个bug?如果要保证j/k在迷宫内,应该有j/k>=1,j >=k#include <iostream>#include <stack> #include <cst...

2019-07-26 18:34:30 93

原创 HDU 2059 龟兔赛跑(DP)

状态转移方程为 dp[i]=min(dp[j]+time, Min) for j in range(0,i);表明最短时间是在某个充电站充完电后一口气冲到i的,内层j循环尝试寻找这样的j,外部i循环不断生成到充电站i的最短时间。#include <cstdio>#include <iostream>#include <algorithm>using na...

2019-07-26 17:26:20 106

原创 HDU N!again

本题巨坑,事实上从41往后余数就已经是0了。所以n>=41之后直接输出0。。这也提醒我们可以直接输出前一部分结果看看规律。。。另外本题有一个模运算的运算规律 (a * b) % p = (a % p * b) % p#include <iostream>#include <cstdio>using namespace std;int main(){ ...

2019-07-25 23:53:09 97

原创 HDU 找新朋友

本题是一道素数筛选题目+因式分解题目。筛选出素数然后对给出的数进行因式分解。最后我们将1~N范围内各因子的倍数(也就是所谓的老朋友)划去,剩下的就是新朋友的个数。题目不难,但注意几个坑即可。以下是已AC代码#include <iostream>#include <algorithm>#include <cmath>#define N 35000usi...

2019-07-22 23:38:59 158

原创 HDU Largest prime factor

本题求不超过n的最大质数在质数表中的位置如2在其中的位置为1,故输出1比较巧妙的做法是可以利用埃式筛重复筛选的特性来完成位置的更新,在筛选的同时也记录了位置。#include <iostream> #include <cstdio> #include <cstring> #define N 1000000 using namespace std; int p...

2019-07-22 22:29:09 147

原创 HDU what's your grade

。。。#include <iostream>#include <cstdio>#include <algorithm>#include <cstring> #include <stdlib.h>using namespace std;struct students{ int AC; char time[20];};...

2019-07-17 15:36:43 113

原创 HDU 3177 (贪心)

本题的关键在于找到移动东西所需的最大瞬时体积,按此降序排列即可。#include <iostream>#include <cstdio>#include <utility>#include <algorithm>using namespace std;bool cmp(pair<int,int> A, pair<int...

2019-07-17 14:34:50 124

原创 HDU 1051 WoodenSticks (简单贪心)

本题是一道贪心算法的题目,需要将按第一个元素排好序的pair数组按第二个元素的值切割成一段段的上升子列。于是我们对整个数组进行扫描,找出到底有多少个升序子列的末尾(实际上也不用,只要第一个扫描过程不结束,每扫描一次就会产生一个升序子列,只需time++即可)。排序的话可以使用结构体+cmp,这里利用pair对象直接排序了。。。找末尾的过程中为了练习STL中stack的使用。。用stack来实...

2019-07-17 12:39:43 217

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除