P3808 【模板】AC自动机(简单版) #include<bits/stdc++.h>using namespace std;queue<int> q;const int N = 500010;struct AC_automaton{ int c[N][26], val[N], fail[N], cnt; //c数组记录字典树节点,val数组为该节点是否为字符串结尾(个数)(记录字符串...
P2051 [AHOI2009]中国象棋(动态规划&&分类讨论) 洛谷题解:https://www.luogu.org/problemnew/solution/P2051#include <bits/stdc++.h>using namespace std;typedef long long ll;const ll MAXN = 105;const ll MOD = 9999973;ll dp[MAXN][MAXN][MAXN];...
树状数组 做题笔记1 HDU - 1166 敌兵布阵:#include <bits/stdc++.h>using namespace std;int a[50005];char cmd[1005];int main(){ int t, n, m, i, j, k, ca = 1; scanf("%d", &t); while(t--) { ...
树的直径 学习笔记2(思维) CodeForces - 1085D - Minimum Diameter Tree:题目大意:给你一棵树,让你分配边权,使树的直径最小。解题思路:均分给叶子节点,其余边权为零,这样答案一定是最小的。#include <bits/stdc++.h>using namespace std;int du[100005] = {0};int main(){ in...
JAVA中的线程 学习笔记 概念:1、JAVA多线程机制:不同线程之间的快速切换2、程序:静态代码3、进程:一次程序的动态执行过程4、线程:比进程更小的执行单位5、线程对象:用Thread及其子类表示多线程:public class Main { public static void main(String[] args) { // TODO Auto-generated method ...
树形DP 学习笔记1(树的最长路径) POJ - 2631 Roads in the North:题目大意:给你一棵树,求树的最长路径,也就是树的直径。树的直径必然是树上某一个点开始往下的最长链和次长链之和,因此,对于每个节点记录两个值 dp1[ i ] 表示以 i 为根的子树中,i 到叶子节点的距离最大值,dp2[ i ] 表示以 i 为根的子树中, 除距离最大值所在的子树,i 到叶子节点的距离最大值(次大值):d...
树的直径 学习笔记1(入门) POJ - 2631 Roads in the North:题目大意:给你一棵树,求这棵树的直径。树的直径:树中最长的简单路径。简单路径:路径上各点均不重复。以下证明内容转自https://www.cnblogs.com/a-clown/p/6131346.html这里给出树的直径的证明: 主要是利用了反证法: 假设 s-t这条路径为树的直径,或者称为树上的最长路...
结构体中的运算符重载 struct node{ int data; bool operator < (const node b)const { return data < b.data; }};
CodeForces - 1085D - Minimum Diameter Tree(思维) 题目大意:给你一棵树,让你分配边权,使树的直径最小。解题思路:均分给叶子节点,其余边权为零。#include <bits/stdc++.h>using namespace std;int du[100005] = {0};int main(){ int n, m, i, j, k; scanf("%d %d", &n, &m); ...
CodeForces - 1085C Connect Three(思维) 题目链接:https://cn.vjudge.net/problem/CodeForces-1085C题目大意:给了你三个点,让你建一条路把三个点都连起来,路径尽可能小。解题思路:构造题,找到中间位置的点,以他做垂线,两边的点水平连接。#include <bits/stdc++.h>using namespace std;set <pair<int, in...
数位DP 学习笔记2 题目HDU 4734 F(x):题目大意是给你两个数A,B,定义F(A)= 每个数位的数 * 2 ^ (位数 - 1)。求 0 - B 区间里的 F(x) <= F(A) 的数字的个数。一个数位DP的做法(TLE):#include <bits/stdc++.h>using namespace std;typedef long long ll;ll a[100...
数位DP 学习笔记1(数位DP入门) HDU 2089 不要62:题目大意是给你一个区间,让你统计这个区间里不包含 4 和 62 的数字的个数。最朴素的思路是:对于每个区间 [l, r],遍历所有在区间 [l, r] 里的数字,然后检查每个数字是不是合法(没有 4 和 62 ),如果合法答案加一。代码如下:#include<bits/stdc++.h>using namespace std;boo...
HDU - 2841 Visible Trees (容斥原理) #include<bits/stdc++.h>using namespace std;typedef long long ll;ll prim[100005], lenp = 0, isprim[100005] = {0};ll data[100005], lend;ll n, m, t, ans;void getprim(){ ll i, j, k; ...
HDU - 2841 Visible Trees (容斥原理) #include<bits/stdc++.h>using namespace std;typedef long long ll;ll prim[100005], lenp = 0, isprim[100005] = {0};ll data[100005], lend;ll n, m, t, ans;void getprim(){ ll i, j, k; ...
HDU - 1796 How many integers can you find (容斥原理) #include<bits/stdc++.h>using namespace std;typedef long long ll;ll n, m, a[15], ans, p;ll lcm(ll a, ll b){return a * b / __gcd(a, b);}void dfs(ll x, ll sum, ll num){ if(num > m)ret...
HDU - 2204 Eddy's爱好 (容斥原理) #include<bits/stdc++.h>using namespace std;typedef long long ll;ll prim[20] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61};int main(){ ll n, i, j, k, ans; while(scanf("%lld"...
HDU - 4734 F(x) (数位DP) #include <bits/stdc++.h>using namespace std;typedef long long ll;ll a[15];ll dp[15][200005];ll po[15], maxx;ll F(ll x){ ll pos = 0, ans = 0, num, pi = 1; while(x) { n...
HDU - 3555 Bomb(数位DP) #include <bits/stdc++.h>using namespace std;typedef long long ll;ll a[1005], dp[1005][2][10] = {0};ll cnt(ll po, ll lim, ll la){ if(po == -1)return 1; if(dp[po][lim][la])return dp[...