- 博客(16)
- 收藏
- 关注
原创 快速幂
long long aaa(long long x,long long y){ long long ans=1; while(y){ if(y&1){ ans=ans*x%998244353; } x=x*x%998244353; y>>=1; } return ans%998244353; }
2019-09-21 14:46:53 132
原创 关于dp的学习
一 二进制优化 假设背包问题一个物品有8个,我们可以发现可以把这八个分为 1,2,4,1;无论最后选几个(1—8)都可以从这几个数字中选出,也就不需要1,2,3,4,5,6,7,8个一次次的dp了。 也就是把n个分为2的零次方,2的一次方,……和多出来的。这样复杂度减少了很多。 二 状态压缩dp 通俗的说,即用0010100(二进制)的第n位表示第n个东...
2019-07-18 21:13:49 216
原创 dp—zoj 3747 Attack on Titans
1.题意是给n个士兵排队,每个士兵三种G、R、P可选,求至少有m个连续G士兵,最多有k个连续R士兵的排列的种数。 思路: 至少m个这种情况不好求出,把他转化为最多n个减去最多m-1个,所以问题转化为: 最多k个连续r,最多n个连续g 减去 最多k个连续r,最多m-1个连续g。 dp[ ] [ ]; dp[ i] [ 0 ]是第i个为 g 的情况。 dp[ i] [ 1...
2019-04-16 22:45:44 159
原创 欧拉函数
rt int aaa(int n) { int ret=1,i; for(i=2;i*i<=n;i++){ if(n%i==0) { n/=i,ret*=i-1; while(n%i==0) n/=i,ret*=i; } } if(n>1) ret*=n-1; return ret;
2018-09-11 16:44:55 253
转载 51nod 1010
从网上找的一种思路,,打表的方法很棒 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> using namespace std; #define N 200000 long long int a[N]...
2018-08-24 15:46:23 150
原创 sdx-暑期总结2
同余定理 (a + b) % m = (a % m + b % m) % m (a * b) % m = ((a % m) * (b % m)) % m 在前面的快速幂中用到。以及在高精度取模中用到。 高精度取模即把高精度数看成各位数的权值与个位数乘积的和。 比如1234 = ((1 * 10 + 2) * 10 + 3) * 10 + 4,对这个数进行取余运算就是上面基本加和乘...
2018-08-24 15:24:07 227
原创 sdx-暑期总结1
1. gcd lcm 素数打表 快速幂 gcd int gcd(int x,int y){ if(y==0){ return x; } x=x%y; gcd(y,x); } lcm int lcm(int x,int y){ return x*y/gcd(x,y); } 素数打表 #include &l...
2018-08-23 20:55:15 137
原创 线段树模板QAQ
两道水题,都抄的模板QAQ HDU 1166 敌兵布阵 #include<iostream> #include<cstdio> using namespace std; #define maxn 50005 int tree[maxn<<2]; void build(int left,int right,int root) { if(left==...
2018-08-21 17:41:40 112
原创 KMP模板(暂无讲解)
如题: #include<iostream> #include<cstring> #include<stdio.h> using namespace std; char str[1002000]; char temp[10200]; int Next[10200],L,l,coun; void getnext() { int i=0,j=-1; ...
2018-08-17 19:55:49 118
原创 矩阵取数问题 V2 51nod-1084
这道题要求正着走一遍,倒着走一遍,收益最高,并且一个位置只能收一回。 那么,很容易想清楚,矩阵中除去临界位置,我们都可以有多种路径到达,所以想要收益最高,每一个位置只能到达一次,那么不妨想成正着来两遍,可是我们却不能分为两次dp,因为如果第一遍最优,那么第二遍也找最优,加起来可能就不是最优了,所以我们需要同步处理,也就是多路dp,相当于两个人同时从起点出发,并且保证两个人路径不重叠,那么我们可以...
2018-08-11 17:31:34 235
原创 拓朴排序
先来代码 #include <iostream> #include<algorithm> #include<queue> #include<stdio.h> #include<string.h> using namespace std; int n,m; int in[550]; int map[550][550]; int a[5...
2018-08-04 20:34:14 178
转载 树的直径
#include <iostream> #include <cstring> #include <queue> #include <vector> const int maxn =100020; using namespace std; int dis[ maxn ],ans; bool vis[ maxn ]; vector <pair &...
2018-08-04 20:30:34 169
原创 链式前向星
先给出代码 #include<bits/stdc++.h> using namespace std; #define MAXN 10050 struct EDGE { int w;//权值 int next;//与该边同起点的上一条边的位置 int e;//边的终点 }edge[MAXN]; int cnt; int head[MAXN];//以i为起点的最后一条边 ...
2018-07-31 16:58:33 115
原创 逆元和同余定理的记忆
文章有问题///////// 快速幂取余 ll ksm(long long x,long long a,long long p){//快速幂取余 ll ans=1; x=x%p; while(a>0){ if(a&1){ ans=(ans*x)%p; } x=(x*...
2018-07-24 11:27:00 274
原创 关于STL的一些理解
1. 集合set。定义: set<int> s1; 类型可选。 se.begin() 返回指向第一个元素的迭代器 se.clear() 清除所有元素 //常用 se.count() 返回某个值元素的个数 //常用,一般用来查这个元素在不在集合中 se.empty() 如果集合为空,返回true se.end() 返回指向最后一个元素之后的迭代器,不是最后一个元素 se.e...
2018-07-21 20:57:50 381
原创 2018-7-21STL题目理解
C - {A} + {B} HDU1412 给你两个集合,要求{A} + {B}. 注:同一个集合中不会有两个相同的元素. Input 每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开. Output 针对每组数据输出一行...
2018-07-21 19:58:10 183
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人