- 博客(67)
- 收藏
- 关注
原创 AtCoder Regular Contest 133 B - Dividing Subsequence(LIS)
题意:给定两个1到n的排列P、Q。从P、Q中找到一个最长的子序列,满足以下条件:1、P中的子序列和Q中的子序列长度相同,设为k。2、a、b分别是P、Q的子序列,a=(a1,a2,...,ak),b=(b1,b2,...,bk)a=(a_1,a_2,...,a_k), b=(b_1,b_2,...,b_k)a=(a1,a2,...,ak),b=(b1,b2,...,bk),对于1<=i<=k,1<=i<=k,1<=i<=k,都有bib_ibi是aia_ia
2022-01-24 23:50:39
435
原创 rust 错误处理
rust 错误处理概述rust的可靠性:错误处理大部分情况下:在编译时提示错误错误的分类可恢复例如文件未找到,可再次尝试不可恢复bug,例如访问的索引超出范围rust没有类似异常的机制可恢复错误, Result<T, E>不可恢复错误,panic!宏不可恢复的错误与panic!当panic!宏执行:你的程序会打印一个错误信息展开(unwind)、清理调用栈(Stack)退出程序默认情况下,panic!发生:
2021-09-23 14:55:14
591
原创 rust HashMap
+# HashMap<K, V>键值对的形式存储数据,一个键(Key)对应一个值(Value)Hash函数:决定如何在内存中存放K和V适用场景:通过K(任何类型)来寻找数据,而不是通过索引创建HashMapHashMap用的比较少,不在Prelude中标准库对其支持较少,没有内置的宏来创建HashMap数据存储在heap上同构的。一个HashMap中:所有的K必须是同一种类型所有的V必须是同一种类型use std::colle...
2021-09-22 21:13:52
362
原创 Rust 容器String
创建String//创建空字符串let mut s = String::new();//根据字符串字面值创建字符串 to_string();let data = "initial contents"';let s = data.to_string();let s1 = "initial contents".to_string();//使用String::from("initial contents");let s = String::from("initial contents");更新
2021-09-22 15:52:33
188
原创 Rust 容器Vec
创建一个Veclet v: Vec<i32> = Vec::new();let v = vec![1, 2, 3];更新Veclet mut v = Vec::new();v.push(1);读取Veclet v = vec![1, 2, 3, 4];let third: &i32 = &v[2]; //非法访问会报错 Panicmatch v.get(2){//非法访问不会报错,返回None Some(third) => println!("The
2021-09-18 17:13:39
458
原创 Rust学习(二):数据类型
标量类型标量只包含一个值,有整数,浮点数,布尔值,字符。整数rust中整数类型一共有6种。Length Signed Unsigned 8-bit i8 u8 16-bit i16 u16 32-bit i32 u32 64-bit i64 u64 128-bit i128 u128 arch isize usize 每一个有符号整数的范围是到,例如i8范围为到 。每一
2021-08-27 11:26:08
432
原创 Rust学习(一):变量、常量
变量的可变性在rust中,变量声明之后,是不可变量,不能再次赋值。变量声明之后,类型就固定了。和C语言一样。fn main(){ let x = 5; //这里x是一个int32类型 println!("The value of x is : {}", x); x = 6; //此处会报编译错误 println!("The value of x is : {}", x);}在定义中加入mut关键字,使变量可变。fn main(){ ...
2021-06-11 16:57:50
276
原创 Atcoder ABC200E Patisserie ABC 2(容斥原理)
题意构造N3(N<=106)个三元组(i,j,k)从左到右排列,1<=i,j,k<=N。排列规则如下:按照sum=i+j+k的和,升序排列如果sum相等,那么i小的放在左边如果sum和i都相等,那么j小的放在左边请找到第K个三元组。Sample Input 12 5Sample Output 11 2 2样例一的所有排列如下:(1,1,1),(1,1,2),(1,2,1),(2,1,1),(1,2,2),(2,1,2),(2,2,1),(2,2,2).Sampl
2021-05-21 16:50:45
641
原创 枚举子集
1、枚举子集#include<iostream>using namespace std;int main() { int n = 4; for(int i = 0; i < (1<<n); ++i){ for(int j = 0; j < n; ++j){ if(i&(1<<j)) cout << 1; else cout << 0;
2021-01-12 09:55:31
560
原创 HDU 4388(博弈)
思路:假设任取一堆石子,个数为n。每次操作就是把n变为k和k XOR n(0<k<n)这两堆。我们发现当n=2^i时,就不能再分了。因为n异或上一个小于n的数肯定大于n。那么最后n可以分成t堆,并且这t堆的个数都满足tn = 2^i,tn的二进制中1的个数为1,那么t就等于n的二进制中1的个数。现在考虑把(k XOR n)换为(2*k XOR n),二进制中1的个数奇偶性不变。所以我们...
2018-04-16 19:18:07
445
原创 Java结构体排序
使用ArrayList容器存放数据。使用Collections.sort()方法排序。class Node{ String name; int grade; Node(String name, int grade){ this.name = name; this.grade = grade; }}例如对Node结构体按grade大小排序升序Collection
2018-01-21 19:50:33
328
原创 Gym 101201J Shopping(RMQ +二分 )
思路:因为每次除余一个数,那么每次至少减少一半,发现这个后就可以直接暴力。例如对于a, 每次找区间中第一个小于等于a的数进行除余。用RMQ+二分时间复杂度(qlogloglogn).#includeusing namespace std;typedef long long LL;const int maxn = 2e5 + 10;int n, q;LL d[maxn << 2][20
2017-09-30 10:38:39
341
原创 POJ - 3678(2-sat)
思路:很明显是一个2-sat问题。对于顶点A,B,如果A & B = 1,那么A,B必须都是真,让A取假时矛盾,即 !A->A, !B->B. 如果A & B = 0,那么A、B一真一假,即A->!B, B->!A. 如果A | B = 1,那么A取假时B为真,B取假时A为真,即!A->B, !B->A. 如果A | B = 0,那么A,B必须都是假,让A取
2017-09-30 10:01:20
426
原创 Gym 101201F Illumination(2-sat)
题意:给定一个n*n的格子,其中有l盏灯,每盏灯能照亮(2 *r+1)的一行或一列,每个格子只能被一行的一盏灯和一列的一盏灯照亮,否则就不满足条件,问是否存在一种方案,打开所有的灯并且满足条件?思路:每个格子有两种状态,用A1表示被行中的灯照亮,A2表示被列中的灯照亮。那么对于同一行的可以互相照射两盏灯A,B,则有A1->B2, B1->A1.对于同一列的可以互相照射两盏灯A,B,则有
2017-09-30 09:43:54
304
原创 CodeForces - 842C Ilya And The Tree
思路:比赛时,写了个树dp,情况考虑少了,赛后才知道gcd的个数是很少的,可以直接暴力,每访问到一个点可以直接去掉这个点或者不去掉这个点,两种情况。开个vector保存这个点gcd的情况,算完之后要去重。#include#include#include#include#include#include#include#include#include#include#inc
2017-08-30 20:39:19
236
原创 FZU 1911 Construct a Matrix(矩阵快速幂+构造)
思路:S(n) = S(n-1) + f(n),通过构造矩阵可以求出S(n),主要问题就是构造一个S(n) * S(n)的矩阵满足条件。自己写一写就能找出构造方法,因为矩阵只包括0,1,-1,那么一个n*n的矩阵,每一行的sum在-n到n之间,又因为-n和n不能同时存在,所以我们可以让每一行的和在-n到n-1之间,一共2*n个数,刚好对应n行,n列,每一行每一列的sum都不相同,然后构造就行了
2017-08-29 09:22:21
342
原创 hdu - 6125 Free from square (状态压缩+分组背包)
思路:考虑到n最多为500,小于sqrt(n)的素因子有八个,可以用二进制表示,而大于sqrt(n)的质因子每个数只可能出现一次,即一个数分为两部分,小于sqrt(n)的质因子状压, 大于sqrt(n)的质因子至多有一个用分组背包。那么含有大于sqrt(n)的素因子的数可以分组。例如71,142,213,355,426,497为一组,因为任意两个选了之后都能被71整除 。组与组之间是不冲突的,因为
2017-08-16 17:29:52
333
原创 LightOJ - 1095 Arrange the Numbers(错排数)
思路:首先前m个数中有k个位置是不变的,所以先选出来有C(n, k)种,然后在前m个数中肯定有(m - k)个数是错排的,后边(n - m)个数不确定,那么可以枚举后边(n - m)个数有i个数没有参与错排,那么没有参与错排的共有k+i个,参与错排的就有n-k-i个,共有C(n-m, i)* d(n - k - i)种。那么答案就是C(n,k) * ∑(C(n-m, i)* d(n - k -
2017-08-15 09:47:27
324
原创 POJ 2288 Islands and Bridges(状压dp)
思路:所求的哈密顿路径由三部分组成,一,所有节点的权值之和,二,每条边的权值之和,三,三元环的权值和。设集合S为拜访的点的集合,当向集合S中加入一个点,与上一条边的起点和终点有关。所以令dp[s][i][j]表示集合S通过边(i, j)加入j点之后的最大权值。那么 dp[s][i][j] = max(dp[s][i][j], dp[p][k][i] + tmp). p表示未加入j点的集合,tm
2017-08-07 12:30:46
249
原创 HDU 6069(素数筛法)
思路:设n=p_1^{c_1}p_2^{c_2}...p_m^{c_m}n=p1c1p2c2...pmcm,则d(n^k)=(kc_1+1)(kc_2+1)...(kc_m+1)d(n)=(c1+1)(c2+1)...(cm+1)则d(n^k)=(kc_1+1)(kc_2+1)...(kc_m+1)d(nk)=(kc1+1)(kc
2017-08-04 09:57:55
338
原创 HDU - 6038 F - Function
思路:求出a和b中各个循环的长度。要使a中的某个循环满足,那么b中必须存在一个循环它的长度为a的因子,因为只有b中循环长度是a中的因子,才能被a整除,最后a置换回来才不变。#include#include#include#include#include#include#include#include#include#include#include#include#inc
2017-07-25 21:07:31
470
原创 HDU - 4424 Conquer a New Region(Kruskal的应用)
思路:类似Kruskal算法,将边按权值从大到小排序,每次加入一条边AB,如果以A所在的集合为中心城市,那么总权值为A所在集合的权值加上B所在集合点的数量乘以这条边的权值,因为A、B所在集合中的边肯定大于AB的权值,如果B所在的集合为中心城市,可以以同样的方法计算,取两者中大的那一个。
2017-07-24 21:15:33
268
原创 HDU - 5072(容斥原理)
题意:给你a,b,n,问区间[a, b]内有多少数与n互素?解题思路:问题可以转化为求1到b内与n互素的个数减去1到a-1内与n互素的问题,那么现在的问题就是求1到x内与n互素的个数。要求1到x内与n互素的个数,可以先求不与n互素的个数。不与n互素的个数可以将n质因数分解,n的质因子的倍数肯定不与n互素。例如x = 15, n = 10。n的质因子有2、5.。(2、4、6、8、10、12、
2017-07-03 17:34:10
329
原创 Linux操作系统实验(3)(模拟实现请求分页虚存页面替换算法)
数据结构: typedef struct _Page{ // 页面 int pageID; //页号}Page;typedef struct _PageQueue{ //页面队列 Page page; struct _PageQueue* next; //下一页面}PageQueue;typedef struct _Block{ //块记录结构
2017-07-01 10:35:06
3028
原创 Linux操作系统实验(2)
内核模块的结构: 头文件声明。头文件module.h和init.h是必不可少的。module.h是加载模块所需要的函数和符号定义;init.h中包含初始化和清楚函数的定义。如果加载是允许用 户传递参数,模块还应包括moduleparam
2017-07-01 09:51:41
769
原创 poj3254(状态压缩DP)
解题思路:考虑到m比较小并且每块地有两种状态,故可以将状态压缩,用一个数表示一行的状态。从上一行到下一行转移时有两个限制,第一,同一行相邻的地不能同时种,上下两行相邻的地不能同时种。例如样例,第一行有5中状态,000,001,010,100,101.第二行有两种状态000,010.那么第二行中000可以由第一行的5中转移有5中,010不能有第一行的010转移故有4种,共九种。#incl
2017-06-27 21:14:06
365
原创 Linux操作系统实验初学(1)(生产者消费者问题)
数据类型:sem_t :信号量的数据类型,本质上是一个长整型。 pthread_t:用于声明线程的ID。pthread_mutex_t:互斥锁函数:int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t * attr):用于初始化互斥锁。int sem_init(sem_t *se
2017-06-27 11:49:31
1436
原创 hdu 2059 龟兔赛跑(DP)
思路:用dp[i][0]表示到第i个加油站不加油所用的最小时间,dp[i][1]表示到第i个加油站加油所用的最小时间。将终点设为第n+1个站,则答案为dp[n+1][0].具体细节看代码。#include#include#include#includeusing namespace std;typedef long long LL;const LL INF = 1000000000
2017-05-31 21:46:15
270
原创 UVA - 11552 Fewest Flops (dp)
思路;用dp[i][j]表示到第i组末尾为字母j块的最小值,那么dp[i][j] = min(dp[i][j], dp[i-1][l] + f[i] - 1), 第i组和第i-1组含有字母l,并且l和j不同,否则dp[i][j] = min(dp[i][j],dp[i-1][l] + f[i]).f[i]为每组的不同字母数。#include#include#include#include
2017-05-16 16:26:12
285
原创 2017山东省第八届ACM省赛 fireworks(杨辉三角 + 逆元)
fireworksTime Limit: 1000MS Memory Limit: 65536KBSubmit StatisticProblem DescriptionHmz likes to play fireworks, especially when they are put regularly.Now he puts some fireworks in
2017-05-13 22:24:21
1002
原创 2017山东省第八届ACM省赛 D. HEX(组合数学)
题意:从(1,1)到(x,y)有多少种走法?每次可以向下,左下,右下走。思路:可以算出从(1,1)到(x,y)最多走tot= x-1步,最多向左下走l = x-y步,向右下走r = tot - l步,向下走一步相当于走1步左下,1步右下。则向下走的步数最多为m = min(l,r)步。枚举向下走的步数i,则向左下走l-i步,向右下走r - i步。那么不同的走法就是向下走,向左下和向右下走的
2017-05-11 21:29:45
624
原创 2017山东省第八届ACM竞赛总结
今年省赛在青岛科技大学举办。 我们周六早上出发,中午就到了,收拾了一下就去热身赛了。 热身赛是三道水题,敲完之后,我们就开始测试机器,测试了一会发现,机器很能跑,1e9加上1、2步简单操作都不超时,感觉正式赛的时候,有些题目应该可以瞎爆。测试完之后就回去休息了。 第二天早上起来,樊神说起他昨天晚上梦到了在做一道非常恶心的模拟题,恰好我昨天也做了
2017-05-10 22:07:11
476
原创 HDU - 5976 Detachment (逆元)
题意:给定x(x 思路:显然要使s最大,那么n要尽可能大,因为1对乘积没有影响,所以a1从2开始,找到最大的n使a1 + a2 + …… + an 然后就可以分情况讨论了,如果得到的序列是连续的,可以直接求。如果是两段,记下这两端的端点分别为k1, k2, k3, k4.先求第一段sum1 = k2! / k1! mod (1e9 + 7)。同理第二段sum2 = k4!/k3! mod
2017-05-02 22:53:02
300
原创 HDU - 5974 A Simple Math Problem(简单数论)
题意:求x,y满足x+y=a,lcm(x, y)= b。(a 思路:这道题现场赛数据很水能用O(n)的复杂度爆过去。后来加了数据就过不了了。只能用O(1)的复杂度。首先知道 x+y=a,lcm(x, y)= b。令g = gcd(x, y),、那么x = i * g, y = j * g (i,j互素,因为如果i,j不互素那么gcd(x,y)就不等于g了,而是等于g乘以i和j的最大公约数了
2017-05-01 22:52:40
246
原创 HDU - 5245 Joyful(数学期望)
题意:给定一个n*m(n,m 思路:设随机一次方格(i,j)被染色的概率为p,不被染色的概率为(1 - p),方格(i,j)在k次中被染色为在k次中没有被染色的逆事件,故方格(i,j)被染色的概率为1 - (1 - p)^k。求方格(i,j)一次被染色的概率,可以将整个方格分为9块区域,5为(i,j)。1234
2017-04-30 00:13:44
382
原创 HDU - 5242 Game(dfs + 贪心)
题意:一棵树有n个结点,n-1条边,每个结点有个权值。每次可以获得从根节点走到叶子结点所有结点的权值和,但是每个结点的权值只能使用一次。求走k次所能获得的最大权值和。思路:首先用dfs1求一遍叶子节点到根结点的权值。根据这个权值从大到小排序,从权值大的开始,dfs2,再求一遍叶子节点到根节点的权值,并且将这条链上除了叶子节点,其他节点的权值改为0,当遇到权值为0的点时,就返回。将得到的新的
2017-04-29 23:33:22
296
原创 POJ - 2034 Anti-prime Sequences(素数判断+搜索)
题意:给你n和m(n,m = 2)的子串的和为合数(非素数)。思路:很明显的搜素+剪枝。当枚举到cur位置时,判断一下长度为l子串的和是否为合数,如果不是就剪掉。#include #include #include #include#include#include#include#include#includeusing namespace std;typedef lo
2017-04-28 22:46:18
270
原创 POJ 3126 Prime Path(素数判断+bfs)
题意:给你两个素数n,m,问最少多少步可以从n变为m?(1000思路:显然,n为起始状态,m为终止状态,用bfs找最短路。#include #include #include #include#include#include#include#include#include#includeusing namespace std;typedef long long ll;
2017-04-28 22:36:20
344
原创 POJ - 3280 Cheapest Palindrome(区间dp)
题意:给你一个由小写字母组成的字符串s,你可以在两端添加或删除字母使其变为回文串,求最小花费。思路:区间dp。用dp[l][r]表示l到r变为回文串的最小花费。则dp[l][r] = min(dp[l+1][r] + add[l], dp[l + 1][r] + del[l],dp[l][r - 1] + add[r], dp[l][r - 1] + del[r]).如果s[l] == s[r
2017-04-22 22:59:34
186
原创 CodeForces798C Mike and gcd problem(思路)
题意:给你一个整数序列a,每次操作把a[i],a[i+1]删除,用a[i] - a[i + 1]和a[i] + a[i + 1]替换,问最少多少次操作可以使序列a的最大公约数大于1?思路:显然一定可以通过操作使a的gcd大于1。首先,先算一遍gcd,如果大于1,直接输出0。否则从头开始检查,如果a[i]为偶数不用变,因为偶数的最大公约数一定大于1,如果是奇数,再看a[i + 1]的奇偶性,如果
2017-04-22 13:03:21
301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人