自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 551

原创 rust 错误处理

rust 错误处理概述 rust的可靠性:错误处理 大部分情况下:在编译时提示错误 错误的分类 可恢复 例如文件未找到,可再次尝试 不可恢复 bug,例如访问的索引超出范围 rust没有类似异常的机制 可恢复错误, Result<T, E> 不可恢复错误,panic!宏 不可恢复的错误与panic! 当panic!宏执行: 你的程序会打印一个错误信息 展开(unwind)、清理调用栈(Stack) 退出程序 默认情况下,panic!发生:

2021-09-23 14:55:14 835

原创 rust HashMap

+# HashMap<K, V> 键值对的形式存储数据,一个键(Key)对应一个值(Value) Hash函数:决定如何在内存中存放K和V 适用场景:通过K(任何类型)来寻找数据,而不是通过索引 创建HashMap HashMap用的比较少,不在Prelude中 标准库对其支持较少,没有内置的宏来创建HashMap 数据存储在heap上 同构的。一个HashMap中: 所有的K必须是同一种类型 所有的V必须是同一种类型 use std::colle...

2021-09-22 21:13:52 512

原创 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 300

原创 Rust 容器Vec

创建一个Vec let v: Vec<i32> = Vec::new(); let v = vec![1, 2, 3]; 更新Vec let mut v = Vec::new(); v.push(1); 读取Vec let v = vec![1, 2, 3, 4]; let third: &i32 = &v[2]; //非法访问会报错 Panic match v.get(2){//非法访问不会报错,返回None Some(third) => println!("The

2021-09-18 17:13:39 571

原创 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 595

原创 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 397

原创 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 1 2 5 Sample Output 1 1 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 800

原创 枚举子集

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 660

原创 HDU 4388(博弈)

思路:假设任取一堆石子,个数为n。每次操作就是把n变为k和k XOR n(0&lt;k&lt;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 1353

原创 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 402

原创 Gym 101201J Shopping(RMQ +二分 )

思路:因为每次除余一个数,那么每次至少减少一半,发现这个后就可以直接暴力。例如对于a, 每次找区间中第一个小于等于a的数进行除余。用RMQ+二分时间复杂度(qlogloglogn). #include using 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 426

原创 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 507

原创 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 380

原创 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 319

原创 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 428

原创 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 409

原创 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 418

原创 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 315

原创 HDU 6069(素数筛法)

思路:设n=p_1^{c_1}p_2^{c_2}...p_m^{c_m}n=p​1​c​1​​​​p​2​c​2​​​​...p​m​c​m​​​​,则d(n^k)=(kc_1+1)(kc_2+1)...(kc_m+1)d(n​)=(c​1​​+1)(c2+1)...(cm+1)则 d(n^k)=(kc_1+1)(kc_2+1)...(kc_m+1)d(n​k​​)=(kc​1​​+1)(kc​

2017-08-04 09:57:55 417

原创 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 531

原创 HDU - 4424 Conquer a New Region(Kruskal的应用)

思路:类似Kruskal算法,将边按权值从大到小排序,每次加入一条边AB,如果以A所在的集合为中心城市,那么总权值为A所在集合的权值加上B所在集合点的数量乘以这条边的权值,因为A、B所在集合中的边肯定大于AB的权值,如果B所在的集合为中心城市,可以以同样的方法计算,取两者中大的那一个。

2017-07-24 21:15:33 347

原创 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 415

原创 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 3189

原创 Linux操作系统实验(2)

内核模块的结构:                       头文件声明。头文件module.h和init.h是必不可少的。module.h是加载模块所需要的函数和符号定义;init.h中包含初始化和清楚函数的定义。如果加载是允许用                                                           户传递参数,模块还应包括moduleparam

2017-07-01 09:51:41 846

原创 poj3254(状态压缩DP)

解题思路:考虑到m比较小并且每块地有两种状态,故可以将状态压缩,用一个数表示一行的状态。从上一行到下一行转移时有两个限制,第一,同一行相邻的地不能同时种,上下两行相邻的地不能同时种。 例如样例,第一行有5中状态,000,001,010,100,101.第二行有两种状态000,010. 那么第二行中000可以由第一行的5中转移有5中,010不能有第一行的010转移故有4种,共九种。 #incl

2017-06-27 21:14:06 468

原创 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 1539

原创 hdu 2059 龟兔赛跑(DP)

思路:用dp[i][0]表示到第i个加油站不加油所用的最小时间,dp[i][1]表示到第i个加油站加油所用的最小时间。将终点设为第n+1个站,则答案为dp[n+1][0].具体细节看代码。 #include #include #include #include using namespace std; typedef long long LL; const LL INF = 1000000000

2017-05-31 21:46:15 333

原创 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 342

原创 2017山东省第八届ACM省赛 fireworks(杨辉三角 + 逆元)

fireworks Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description Hmz likes to play fireworks, especially when they are put regularly. Now he puts some fireworks in

2017-05-13 22:24:21 1096

原创 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 726

原创 2017山东省第八届ACM竞赛总结

今年省赛在青岛科技大学举办。         我们周六早上出发,中午就到了,收拾了一下就去热身赛了。         热身赛是三道水题,敲完之后,我们就开始测试机器,测试了一会发现,机器很能跑,1e9加上1、2步简单操作都不超时,感觉正式赛的时候,有些题目应该可以瞎爆。测试完之后就回去休息了。         第二天早上起来,樊神说起他昨天晚上梦到了在做一道非常恶心的模拟题,恰好我昨天也做了

2017-05-10 22:07:11 553

原创 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 412

原创 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 344

原创 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)。 1 2 3 4

2017-04-30 00:13:44 473

原创 HDU - 5242 Game(dfs + 贪心)

题意:一棵树有n个结点,n-1条边,每个结点有个权值。每次可以获得从根节点走到叶子结点所有结点的权值和,但是每个结点的权值只能使用一次。求走k次所能获得的最大权值和。 思路:首先用dfs1求一遍叶子节点到根结点的权值。根据这个权值从大到小排序,从权值大的开始,dfs2,再求一遍叶子节点到根节点的权值,并且将这条链上除了叶子节点,其他节点的权值改为0,当遇到权值为0的点时,就返回。 将得到的新的

2017-04-29 23:33:22 364

原创 POJ - 2034 Anti-prime Sequences(素数判断+搜索)

题意:给你n和m(n,m = 2)的子串的和为合数(非素数)。 思路:很明显的搜素+剪枝。当枚举到cur位置时,判断一下长度为l子串的和是否为合数,如果不是就剪掉。 #include #include #include #include #include #include #include #include #include using namespace std; typedef lo

2017-04-28 22:46:18 345

原创 POJ 3126 Prime Path(素数判断+bfs)

题意:给你两个素数n,m,问最少多少步可以从n变为m?(1000 思路:显然,n为起始状态,m为终止状态,用bfs找最短路。 #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll;

2017-04-28 22:36:20 421

原创 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 268

原创 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 384

空空如也

空空如也

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

TA关注的人

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