- 博客(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 131
原创 关于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
原创 欧拉函数
rtint 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 200000long 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 225
原创 sdx-暑期总结1
1.gcd lcm 素数打表 快速幂gcdint gcd(int x,int y){ if(y==0){ return x; } x=x%y; gcd(y,x);}lcmint lcm(int x,int y){ return x*y/gcd(x,y);}素数打表#include &l...
2018-08-23 20:55:15 137
原创 线段树模板QAQ
两道水题,都抄的模板QAQHDU 1166 敌兵布阵#include<iostream>#include<cstdio>using namespace std;#define maxn 50005int 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 10050struct 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 272
原创 关于STL的一些理解
1. 集合set。定义:set<int> s1; 类型可选。se.begin() 返回指向第一个元素的迭代器se.clear() 清除所有元素 //常用se.count() 返回某个值元素的个数 //常用,一般用来查这个元素在不在集合中se.empty() 如果集合为空,返回truese.end() 返回指向最后一个元素之后的迭代器,不是最后一个元素se.e...
2018-07-21 20:57:50 380
原创 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 182
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人