![](https://img-blog.csdnimg.cn/20200416155533395.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
ACM
ACM经历,训练题目整理
__meteor
对于未来, 我只是一个孩子;
展开
-
ZOJ 3732 可图性判定--Havel-Hakimi定理
题意:给定n个点度数,问是否可以构造一个简单图。思路:Havel-Hakimi定理 :1.将度数从小到大排序2.用第一个向后面连续d[1]个点连边,若点数不够则不能构造3.若点数够,则将每个点度数减1,若出现负值,则不能构造,4.去掉该点返回步骤一,直到集合中没有点。对于多个图,只需要判定i+d[i]和i+d[i]+1这两个点度数是否一致,若一致就交换。即可达到不同图的...原创 2018-10-26 18:53:39 · 209 阅读 · 0 评论 -
最小表示法-解决O(n)找循环字符串最小字典序串
https://ac.nowcoder.com/acm/contest/328/A 分为三种情况1.如果str[i+k]==str[j+k] k++。2.如果str[i+k] > str[j+k] i = i + k + 1,即最小表示不可能以str[i->i+k]开头。3.如果str[i+k] < str[j+k] j = j + k + 1,即最小表示不可能以...原创 2019-01-05 19:46:14 · 1053 阅读 · 2 评论 -
HDU-4821-String-hash-map
title: HDU 4821 String --hash+mapdate: 2018-10-30 10:30:03categories: “算法”tag:- ACM- map- hash题意:给上限为1e5的字符串,找出有多少长度为M*L的子串,并且该子串的M个长度为L的子串各不相同。思路:开始认为子串不想同的定义是每个位置的字符不相同,感觉说的有歧义。two stri...原创 2018-11-01 15:30:38 · 193 阅读 · 0 评论 -
UVA - 11019 Matrix Matcher (AC自动机)
传送门思路:可以对于模式矩阵的每一行构造AC自动机,然后在目标矩阵的每一行找模式矩阵的每一行。如果找到了,就在(R-r, c)位置加一,R是目标矩阵的行,r是模式矩阵的行,c是R矩阵正在匹配行的列,这样只要最后遍历一边记数矩阵, 看看哪个点是模式矩阵的行数就行了,对于模式矩阵相同的行,在插入的时候我用了vector去保存。#include<bits/stdc++.h>usi...原创 2018-08-05 11:03:12 · 124 阅读 · 0 评论 -
2018牛课多校第一场 I-Substring(后缀数组SA)详
传送门思路:让你从长度为n的串中找出不同构的所有子串个数,同构的意思就是有a、b、c分别对应一种映射。那么也就是说对于一个包含不止一种字符的串来说,他可以有六种同构的串。如果一个串中包含这六种同构子串,那么也就只能算一种。那问题就是在这个串的中,对于某一类子串,不一定存在几种同构体。假如我们对这个串用这六种映射派生出6种串,组成一个大串, 那么原先串出现的每一类串,必然在大串中有6种同构体。所...原创 2018-07-24 22:40:16 · 164 阅读 · 0 评论 -
uva 11107 (后缀数组入门)
思路:找出现次数大于n/2次的最大子串,一个子串出现多次,那么他们的排名肯定是相邻的,所以利用height数组,找出相邻排名最长公共前缀长度等于 K 的区间。看看这个区间中的个数是否大于n/2, 满足的话这个k长度就符合。所有我们需要枚举k的大小,可以用二分查找这个临界点。#include<bits/stdc++.h>using namespace std;typedef l...原创 2018-07-24 19:14:05 · 389 阅读 · 0 评论 -
Codeforces Round #499 (Div. 2) F-Mars rover
传送门思路:题意是说,火箭这个系统是用一颗树来表示的,树的叶子节点是输入,非叶子节点是一个逻辑判断。然后问你如果修改一个叶子节点的值。结果会变成什么。 叶子节点按从小到大输出修改该节点后 一号节点的值是多少。其实是一个逻辑题。某一个节点的值会不会受到子节点的值影响,就是看子节点修改后会不会对该节点的值产生影响。如果会产生影响,那么这课子树的叶子节点就有可能产生影响。若不产生影响, 那么这棵...原创 2018-07-27 14:36:36 · 203 阅读 · 0 评论 -
Codeforces Round #479 (Div. 3)
D:Divide by three, multiply by two 除了这种做法还可以通过建图的方式#include<bits/stdc++.h>using namespace std;typedef long long ll;ll num[110], ans[110];int n, flag=0;map<ll , int >mp;bool dfs(...原创 2018-05-08 19:19:05 · 112 阅读 · 0 评论 -
stripe2
C. Stripe 2time limit per test1 secondmemory limit per test64 megabytesinputstandard inputoutputstandard outputOnce Bob took a paper stripe of n squares (the height of the stripe is 1 square). In each...原创 2018-03-11 09:25:51 · 239 阅读 · 0 评论 -
Codeforces 798A - Mike and palindrome
原题:Mike has a string s consisting of only lowercase English letters. He wants to change exactly one character from the string so that the resulting one is a palindrome.A palindrome is a string t原创 2017-07-09 18:17:49 · 478 阅读 · 0 评论 -
判断括号是否匹配
/*judege whether every bracket appears in pairs*/#include#include#define capacity 100bool is_match(char ch1, char ch2){ return ch1=='('&&ch2==')' || ch1=='['&& ch2==']' || ch1=='{'&&ch2原创 2017-06-22 11:51:30 · 513 阅读 · 0 评论 -
判断回文字-初次接触栈
#include#include#define capacity 100int main(){ int n, mid, i, top = 0; char _stack[capacity], str[capacity]; gets(str); n = strlen(str); mid = n/2-1;//中间位置的判断尤为重要原创 2017-06-22 11:10:21 · 204 阅读 · 0 评论 -
快排
#includeint a[1000];void quicksort(int first, int last){ int temp = first, i = first, j = last, t; if(i >= j)return; while(i != j){ while(a[j]>=a[temp]&&j>i)j--;原创 2017-06-22 10:50:37 · 189 阅读 · 0 评论 -
蓝桥 第八届 A组 油漆面积
该题有很多种做法,乱搞可以过,最好的方法应该是扫描线,本题是扫描线模板题官网数据第一个错了,所以83分就是满分#include<bits/stdc++.h>using namespace std;const int N=1e4+10;#define mp(x,y) make_pair(x,y) #define fir first #define sec sec...原创 2019-03-18 21:44:11 · 127 阅读 · 0 评论 -
HDU5536 01字典树求模板
#include<bits/stdc++.h>using namespace std;const int N=1e5+10;struct Tire{ int nxt[N][2], cnt[N], ed[N]; int L, root; void init(){ L=root=0; nxt[root][0]=nxt[root...原创 2018-10-01 19:52:25 · 168 阅读 · 0 评论 -
HDU 4408 最小生成树计数
传送门思路:首先需要了解Matrix_Tree定理1.设 G是无向图的邻接表,D是无向图各个点的度数2.令M=D-G,则M的任意n-1阶余子式的行列式值的 绝对值, 就是无向图生成树的个数应注意的是邻接表的值不只是0,1值,也就是说,当图出现重边的话,邻接表该位置累加。这道题思路,对于最小生成树,克鲁斯卡尔算法是将边从小到大排序,对于同一大小的边,在最小生成树中用到的数量是...原创 2018-09-21 13:05:35 · 202 阅读 · 0 评论 -
2018南京网络赛 Skr(manacher奇偶模板+hash模板)
传送门题意:给一个只有‘1’~‘9’的串,求不同回文串代表数值的和思路:马拉车找回文串,hash标记不同,hash方法求数值#include<bits/stdc++.h>using namespace std;const int N=2e6+10;const int mo=1e9+7;typedef long long ll;typedef unsigned l...原创 2018-09-02 18:26:13 · 215 阅读 · 0 评论 -
素数线性筛模板
参考于该博客 int Mark[MAXSIZE]; int prime[MAXSIZE]; //判断是否是一个素数 Mark 标记数组 index 素数个数 int Prime(){ int index = 0; memset(Mark,0,sizeof(Mark)); for(int i = 2; i < MAXSIZE; ...原创 2018-09-01 20:38:10 · 160 阅读 · 0 评论 -
超级输入输出外挂(转载)
转载博主链接前言: 在ACM比赛中,大家可能会遇到一些读入相当大的题目,此时前人告诉我们:遇到这些题目,我们最好不要用cin/cout,因为cin/cout在读入输出的过程中相对与scanf/printf来说比较慢。 但是还是有那么些个善(丧)良(心)的出题人还是喜欢卡读入的常数,可能我们的scanf/printf,甚至普通的read()函数也无法支撑。此时要如何办呢?于是...转载 2018-08-31 13:31:12 · 268 阅读 · 0 评论 -
HDU5884 二分+哈弗曼树
传送门huffman模板,如果每次取k个能取完,num=k,取不完先将n%(k-1)取完,再每次取k#include<bits/stdc++.h>using namespace std;const int N=1e5+10;typedef long long ll;int arr[N], n, limit;/****************************/...原创 2018-08-28 11:37:13 · 105 阅读 · 0 评论 -
牛课多校F-TypingPractise(KMP或者AC自动机)
传送门思路:用KMP和AC思路是一样的。ac的思路就是跑文本串,记录下每个节点的最小值,这样会省时间,因为fail指针的存在,我们不需要管模式串,kmp的话就是每个模式串都要匹配,取最小值;#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int val[N];int nxt[500010][2...原创 2018-08-16 22:14:52 · 216 阅读 · 0 评论 -
HDU 6397 Character Encoding(容斥)
传送门挑选m个数 ,和为k,数的取值为0~n-1,相当于将每个数加1,使挑的m个数和是k+m,可以看成k+m个1,用m-1个隔板,隔成m分,所以总数为C(m+k-1, m-1),减去不合法的,就是大于n的情况。先看只有一个位置大于n,有C(m,1)*C(m+k-n-1, m-1)种情况,但是有重复,比如1,3,2,1 。 3,1,2 ,1这两种情况,n是2,k是8的话,3、3、2、1是一...原创 2018-08-15 21:30:13 · 134 阅读 · 0 评论 -
HDU1695+HDU6390 莫比乌斯反演入门+分块思想。
HDU1695莫比乌斯反演两个公式思路:该题的题意是给你两个范围,1~n,1~m,求x属于1~n,y属于1~m, 且GCD(x,y)==k,这样的有多少对。等同于求1~n/k, 1~m/k, gcd(x,y)==1,的对数。令f(t)为gcd(x, y)等于t的个数,F(n)等于gcd(x, y)=t的倍数的个数。所以可以用第二个公式,就是说gcd(x,y)等于t的倍数的所...原创 2018-08-14 20:19:20 · 356 阅读 · 0 评论 -
HDU 6350 Always Online (仙人掌图,最大流)
传送门这道题真的是坑,竟然用ull,ll都会爆。首先这是一个仙人掌图。题意让求任意两点最大流,再进行异或。先说最大流,对于环上任意两点最大流,就是两条路径最小的边和,这就等效于求出环中最小的边,使环上任意一条边都加上这条边,然后去掉最小边。这样会求出一棵树。我们将边按从大到小排序,每次向空图里加一条边(用并查集维护),那么加的这条边就是两个连通分量的最大流。还是老方法。对于仙人掌图,(...原创 2018-08-12 21:25:18 · 883 阅读 · 0 评论 -
最长路
//以i为终点 嵌套矩形问题 int dfs(i){ if(d[i]>0) return d[i]; d[i]=1; for(int j=1; j<=n; j++) { if(G[i][j]) d[i] =max(d[i], dfs(j)+1); } return d[i];}原创 2018-03-31 20:31:11 · 227 阅读 · 0 评论 -
串的模式匹配算法-KMP
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int nxt[110];char s[110], s1[100];void getnxt(){ int j=nxt[0]=-1, i=0; int len=strlen(s); whi...原创 2017-11-10 20:32:37 · 206 阅读 · 0 评论 -
求重心的板子
#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include using namespace std; int N; // 1<= N <= 20000const int maxn = 20000;vector tree[maxn + 5]; // tree[i转载 2017-10-24 18:53:53 · 153 阅读 · 0 评论 -
牛课暑假多校第四场 A-Ternary String(欧拉降幂)
传送门思路:从前往后遍历字符串,如果遇到0,那么时间就是T+1(假设T是之前所用的时间)如果遇到‘1’,时间是2*T+2, 因为在之前的T时间,这个‘1’会产生T个零,消去这个‘1’的时候还会产生1个‘0’,这样算的话就是产生了T+1个’0‘,再加上之前的时间T, 消去这个’1‘的时间 1, 总共为 2*T+2的时间;如果遇到’2‘,时间是3*(pow(2, T+1)-1)。因为遇到...原创 2018-07-28 19:50:39 · 143 阅读 · 0 评论 -
ZOJ - 3609 (逆元、扩展欧几里得板子)
#include<cstdio>using namespace std;typedef long long ll;ll extend_gcd(ll a, ll b, ll &x, ll &y){ if(!a&&!b) return -1; if(b==0){ x=1; y=0; return a; } ll d=extend_gcd(...原创 2018-04-22 17:20:15 · 327 阅读 · 0 评论 -
牛课 等式(唯一分解定理求因子个数)
点击打开链接#include<cstdio>#include<cmath>using namespace std;int n, ans=1;int main(){ int t; scanf("%d", &t); while(t--) { ans=1; scanf("%d", &n); int m=sqrt(n+0.5); ...原创 2018-03-27 16:59:12 · 192 阅读 · 0 评论 -
蓝桥 排列序数(康托展开)
标题: 排列序数X星系的某次考古活动发现了史前智能痕迹。 这是一些用来计数的符号,经过分析它的计数规律如下: (为了表示方便,我们把这些奇怪的符号用a~q代替)abcdefghijklmnopq 表示0 abcdefghijklmnoqp 表示1 abcdefghijklmnpoq 表示2 abcdefghijklmnpqo 表示3 abcdefghijklmnqop 表示4 abcdefghij...原创 2018-03-25 21:51:45 · 137 阅读 · 0 评论 -
HDU 2855
Fibonacci Check-upTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1631 Accepted Submission(s): 929Problem DescriptionEvery AL原创 2017-12-01 22:41:12 · 203 阅读 · 0 评论 -
NYOJ 114 序列(大数加操作)
某种序列时间限制:3000 ms | 内存限制:65535 KB难度:4 描述数列A满足An = An-1 + An-2 + An-3, n >= 3 编写程序,给定A0, A1 和 A2, 计算A99 输入输入包含多行数据 每行数据包含3个整数A0, A1, A2 (0 数据以EOF结束输出对于输入的每一行输出A99的值样例输入1原创 2017-11-29 23:03:11 · 183 阅读 · 0 评论 -
poj-3233 Matrix Power(构造矩阵+矩阵快速幂)
Matrix Power SeriesTime Limit: 3000MS Memory Limit: 131072KTotal Submissions: 24823 Accepted: 10304DescriptionGiven a n × n matrix A and a positive integer k, f原创 2017-11-27 18:53:59 · 173 阅读 · 0 评论 -
HDU4349-Xiao Ming's Hope(Lucas定理)
Xiao Ming's HopeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2435 Accepted Submission(s): 1674Problem DescriptionXiao Ming原创 2017-11-08 19:58:49 · 451 阅读 · 0 评论 -
HDU 1027 Ignatius and the Princess II
Ignatius and the Princess IITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8906 Accepted Submission(s): 5232Problem Description原创 2017-10-16 21:05:13 · 142 阅读 · 0 评论 -
excel 数字字母转换
#include<bits/stdc++.h>using namespace std;const int N=1e5+10;const int inf=0x3f3f3f3f;void print26(long long sum){ if( sum==0 ) return; print26(sum%26==0 ? sum/26-1:sum/26);...原创 2019-03-10 10:57:50 · 1129 阅读 · 0 评论 -
codeforces 1058E (思维)
传送题意:给n个数,每个数的二进制1都可以随意的换位置,问区间异或为0的有多少个思路:该问题可以转化为他的充要条件:1.区间1的个数为偶数2.区间最大值不超过区间和的一半;偶数区间个数可以用cnt[i][2]记录以1开始,1~i中偶数和奇数区间个数,那么偶数区间就是假如现在前缀是偶数,那就加cnt偶数,反之加奇数。因为偶数=偶-偶/奇减奇对于不符合的,因为数是60位...原创 2018-10-18 11:25:34 · 240 阅读 · 0 评论 -
HDU - 5521 巧妙地最短路
题意:n个点,m块,块的意思就是说,在块中的点任意两点的距离都是t,问分别从1点和n点走到某个点,这个点的花费就是二者较大的,问这n个点花费最小是多少,并按字典序打印序号思路:这题头疼的就是不知道怎么建图,暴力建图会超内存,有一个巧妙的方法是将这个块中的点全部连到一个点上,每条边花费t/2,这样任意两点仍然是t的花费。这样最多1e6条边#include<bits/stdc+...原创 2018-10-10 14:19:38 · 151 阅读 · 0 评论 -
HDU 5514 巧妙的容斥
题意:给你一些数,对于每一个数a,可以得到t=(t+a)%m,t可以无限制算下去,问0~m-1之间能被得到的数的和。思路:根据欧几里得原理,a能得到的数就是a和m的最大公约数在0~(m-1)的倍数。所以容斥就可以算出答案,每个数的倍数等差求和。但是数据是1e9,要进行容斥的数非常多,能确定的是最大公约数一定是m的因子x,x算一遍相当于x所有的倍数都算了一遍,所以算某个因子的时候,只...原创 2018-10-10 14:06:52 · 145 阅读 · 0 评论