A -- 题解
Object_S
Java C++
展开
-
P1279 字串距离
此题不难看出为O(n^2)的二维DP,首先考虑状态方程。容易想到,对于f[i][j],只有两种选择:1.字符相减 2.使用空格之所以任意一个字符都可以用空格和它比较,是因为空格可以无限/任意位置添加,所以无论怎样,都存在一个全用空格与字母比较的解。可以发现,“ab"与” "和"ab"与"a “和"ab"与” a"唯一的不同就是a所比较的位置。将两个字符串分别视为两个数组,由加法法则的交换律可知,贪心选择最优选项成立最优子结构。#include<cstdio>#include<.原创 2021-09-26 16:13:23 · 220 阅读 · 0 评论 -
P3387 【模板】缩点
题目地址易错点:最深刻的孤独,也许并不是面壁者的深思。在那只有一个结点的scc里,不知存放着多少份无处安放的彷徨. 世界上最遥远的距离不是你和我,而是你在搜索树上的那一头,我却在搜索树的这一头。那被有向图规则所束缚着的可达性,令我们天人永隔.#include<cstdio>#include<iostream>#include<queue>...原创 2019-07-19 20:46:38 · 123 阅读 · 0 评论 -
P1965 转圈游戏
题目地址易错点:括号后面也需要mod运算.#include<cstdio>#include<iostream>using namespace std;int mod;int poww(int x,int k){ int ans=1,tmp=x; while(k){ if(k&1){ ans=ans*tmp%mod; } ...原创 2019-10-13 08:34:04 · 180 阅读 · 0 评论 -
P3629 [APIO2010]巡逻(树的直径)
题目链接易错点:l2必须要设置全局变量而不能设置局部变量,这是由于设置局部变量无法兼顾所有情况造成的. bfs并设置直径上边权为-1后,如果k=2则不能继续直接使用bfs获得答案,这是bfs的拓展加点性造成的(类比dijkstra). 如果两个变量可以用一个变量导出就用一个变量.BFS方法正确性的证明:如果源点在直径上:显然正确. 如果源点不在直径上:既然源点不在直径上那...原创 2019-09-04 22:37:35 · 210 阅读 · 0 评论 -
AW305 一个古老的石头游戏
题目地址注意点:开不下数组,只能用GarsiaWachs.#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int MAXN=50010;int a[MAXN],tot,ans;v...原创 2019-09-21 23:02:23 · 136 阅读 · 0 评论 -
AW244 谜一样的牛
题目地址易错点:每头牛对应一个身高,且所有身高在范围[1~n]内.(预处理时需要在树状数组中提前加入每个身高) 每头牛所属的位置是它前面牛数量+1,例如:小A分数比小B分数大的数值为无穷小,那么小B的名次就是小A的后一名。因此,在查询位次(即身高)时需要使用query(a[i]+1).#include<cstdio>#include<iostream>...原创 2019-09-23 12:41:59 · 144 阅读 · 0 评论 -
AW239 奇偶游戏
题目地址注意点:当小A的回答为偶数时,存储在结构体内的值应当设为0(防止中间状态不合法).易错点:并查集注意初始化fa[i]=i. 离散化后,使用时应当先进行二分(lower_bound(a+1,a+n+1)-a)获取离散化后的值. 使用并查集时,应当使用输入时获取的数据,而不是并查集编号.(p->x,q->y)#include<cstdio>#...原创 2019-09-23 21:23:26 · 119 阅读 · 0 评论 -
AW241 楼兰图腾
题目地址易错点:获取较小值时注意要使用a[i]-1(相等的不能用于计数).#include<cstdio>#include<iostream>#include<cstring>#define ll long longusing namespace std;const int MAXN=200006;int lowbit(int x){...原创 2019-09-23 23:54:22 · 153 阅读 · 0 评论 -
AW246 区间最大公约数
题目地址易错点:线段树查询时直接保留查询范围即可. 线段树递归结束后,返回gcd结果时应取绝对值. 本题线段树初始化时需要使用差分数组(更相减损术);同样地,在进行区间修改时[l~r]的修改会影响到线段树内[l~r+1]的值.#include<cstdio>#include<iostream>#include<cstring>#incl...原创 2019-09-25 00:22:56 · 364 阅读 · 0 评论 -
P1060 开心的金明
题目地址注意点:如果不把第一维(物品种类)滚动掉的话,正序/反序都无所谓.滚动前:#include<cstdio>#include<iostream>using namespace std;const int MAXN=6e4,MAXM=1e2;int f[MAXM][MAXN],v[MAXM],w[MAXN];int main(){ in...原创 2019-09-26 12:30:16 · 84 阅读 · 0 评论 -
P1616 疯狂的采药
题目地址注意点:T*M的上界开不下,必须滚动.#include<cstdio>#include<iostream>using namespace std;const int MAXT=2e5,MAXM=2e4;int f[MAXT],v[MAXM],w[MAXM];int main(){ int t,m; scanf("%d%d",&t...原创 2019-09-26 12:38:40 · 167 阅读 · 0 评论 -
AW196 质数距离
题目地址毒瘤点:primeCnt必须放到一个玄学的位置。如果放到上面,评测的时候就会报错.易错点:INF必须开到2147483647而不是1<<30. 需要对质数判定有着纵深的理解.#include<cstdio>#include<iostream>#include<cstring>#include<cmath&g...原创 2019-10-01 08:53:28 · 104 阅读 · 0 评论 -
AW280 陪审团
题目地址易错点:需要单独开一个设置中间点的数组lst[][][]. 存储答案需要使用vector. 枚举选择的人数时需要倒序循环(参考0/1背包的状态设计思想). 每次初始化时可将中间值设为400,并将f[0][400]设为0,则负数-x可记为400-x,正数同理.#include<cstdio>#include<iostream>#include...原创 2019-09-18 00:19:01 · 128 阅读 · 0 评论 -
AW288 休息时间
题目地址状态设计:f[小时数(用i&1滚动)][睡觉时长][当前是否在睡觉].易错点:可以使用滚动数组(i&1). 在更新正在睡觉的状态(f[][][1])前需要保证当前总睡觉时间大于1(起码入睡过). 在更新f[i&1][j][1]时,可以发现如果上个小时没有睡觉现在就不恢复体力,因此只有在从f[(i-1)&1][j-1][1]尝试进行转移时...原创 2019-09-17 12:59:57 · 146 阅读 · 0 评论 -
AW344 观光之旅
题目地址易错点:如果要将k改为k-1则需要保证全部改完,否则就会出现严重错误. 获取最小环时j应当大于i,由对称性可知最终可求出正确答案. 环的性质是dis[i][j]+a[j][k]+a[k][i],即呈环状. 需要开long long.#include<cstdio>#include<iostream>#include<cstring&g...原创 2019-09-09 12:44:17 · 149 阅读 · 0 评论 -
AW345 牛站(广义矩阵乘法优化floyd)
题目地址易错点:由于是广义矩阵乘法,mul(Mat a,Mat b)方法中的局部变量ans不能使用memcpy直接复制矩阵a或b的数据.#include<cstdio>#include<iostream>#include<cstring>#include<map>using namespace std;const int M...原创 2019-09-09 22:09:58 · 345 阅读 · 0 评论 -
AW362 区间 (差分约束)
题目地址易错点:基础部分(比如加边等)应当保证不出问题.#include<cstdio>#include<iostream>#include<cstring>#include<queue>using namespace std;const int MAXN=1e5,MAXM=2e5;struct Edge{ int fr...原创 2019-09-10 12:46:31 · 227 阅读 · 0 评论 -
AW361 观光奶牛
题目地址易错点:二分时,l,r,mid的类型都要设为double. 0/1规划问题在该类图上可转化为乘积的形式并使用spfa判断当前解是否合理. 注意区分i和i所代表的点a[i].#include<cstdio>#include<iostream>#include<cstring>#include<queue>#defin...原创 2019-09-10 23:25:55 · 235 阅读 · 0 评论 -
AW363 B城
题目地址简述:割点+方案统计(乘法原理)易错点:必须开long long. 边要开到2e6. 初始化dfn[x]时候需要一块初始化low[x]. 输出时需要使用"%lld\n".#include<cstdio>#include<iostream>#define ll long longusing namespace std;const i...原创 2019-09-13 14:10:24 · 182 阅读 · 0 评论 -
AW365 圆桌骑士
题目地址简述:缩点+二分图染色(判奇环)易错点:为了防止错误加边(自环,即i==j),可将加边时的第二层遍历从i+1开始,由对称性可知加边无错误. vector直接用[]比at()更美观. 对于每个dcc都要重置一次color,这是因为同一个点可能属于多个dcc.#include<cstdio>#include<iostream>#includ...原创 2019-09-14 08:47:05 · 251 阅读 · 0 评论 -
AW366 看牛
题目地址易错点:ans和stack数组应当开到MAXM.#include<cstdio>#include<iostream>using namespace std;const int MAXN=2e4,MAXM=1e5;struct Edge{ int from,to,w,nxt;}e[MAXM];int head[MAXN],edgeCnt=...原创 2019-09-14 16:15:00 · 343 阅读 · 0 评论 -
AW383 观光
题目地址易错点:预处理时cnt[s][0]应当初始化为1.#include<cstdio>#include<iostream>#include<cstring>#include<queue>using namespace std;const int MAXN=2e3,MAXM=2e4;struct Edge{ int f...原创 2019-09-15 14:12:34 · 125 阅读 · 0 评论 -
AW281 硬币
题目地址易错点:枚举剩余体积时需要正向遍历.(有效遍历状态) 每组数据都需要重置计数数组(f[]),并设置f[0]=true(边界条件).#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int MAXN=2e2,MAXM=2e5;...原创 2019-09-16 12:32:34 · 190 阅读 · 0 评论 -
AW197 阶乘分解
题目地址算法原理: (文章链接)#include<cstdio>#include<iostream>using namespace std;const int MAXN=1e6;int primes[MAXN],primeCnt=0;bool notPrime[2*MAXN];void initPrime(int x){ for(int i=...原创 2019-10-01 10:22:49 · 138 阅读 · 0 评论 -
AW198 反素数
题目地址主要思路:素因子累乘并利用题目限制条件更新答案.#include<cstdio>#include<iostream>#define ll long longusing namespace std;int primes[26]={0,2,3,5,7,11,13,17,19,23,29,31,37},primeCnt=12;//质数表int m...原创 2019-10-01 21:37:42 · 178 阅读 · 0 评论 -
P1079 Vigenère 密码
题目地址注意点:写完一段代码后应当先进行一次静态查错.#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int MAXN=2e3;bool isCapital(char val){//是否大写 if(val>='A'&a...原创 2019-10-09 00:42:35 · 239 阅读 · 0 评论 -
P1083 借教室
题目地址注意点:需要一开始build一次才能保证minn的正确性.#include<cstdio>#include<iostream>using namespace std;const int MAXN=2e6,INF=2e9,root=1;struct Node{ int l,r; int minn=INF,lazy;}tr[4*MAXN...原创 2019-10-09 20:55:29 · 149 阅读 · 0 评论 -
P1179 数字统计
题目地址#include<cstdio>#include<iostream>using namespace std;int getTwoNum(int val){ int cnt=0; while(val){ int nowVal=val%10; if(nowVal==2)cnt++; val/=10; } return cnt;}i...原创 2019-10-09 21:41:03 · 177 阅读 · 0 评论 -
P1190 接水问题
题目地址注意点:每一个模块完成后都应进行测试. 编程前应当首先自行模拟每个样例.#include<cstdio>#include<iostream>#include<queue>using namespace std;const int MAXN=2e4,MAXM=1e3;int restTime[MAXM];//每个水龙头的剩余使用...原创 2019-10-10 00:22:28 · 224 阅读 · 0 评论 -
P1307 数字反转
题目地址注意点:小题小做. 逻辑清晰.#include<cstdio>#include<iostream>#include<cstring>using namespace std;char str[50];int main(){ cin>>str; int cnt=strlen(str)-1; bool isNega...原创 2019-10-10 18:49:33 · 151 阅读 · 0 评论 -
P1328 生活大爆炸版石头剪刀布
题目地址注意点:可以直接用{}初始化数组.#include<cstdio>#include<iostream>using namespace std;const int MAXN=2e3;int isWin[12][12]={{0,-1,1,1,-1},{1,0,-1,1,-1},{-1,1,0,-1,1},{-1,-1,1,0,1},{1...原创 2019-10-10 21:31:55 · 133 阅读 · 0 评论 -
P1059 明明的随机数
题目地址#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int MAXN=1e3;int a[MAXN];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i...原创 2019-10-10 21:41:02 · 324 阅读 · 0 评论 -
P1540 机器翻译
题目地址#include<cstdio>#include<iostream>#include<queue>using namespace std;const int MAXN=1e4;bool inMemory[MAXN];//当前是否在内存中 int memoryCnt=0;//内存中已储存的单词总数 queue<int>...原创 2019-10-11 19:04:45 · 151 阅读 · 0 评论 -
CH6101 最优贸易
描述C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为1条。C国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。商人阿龙来到C国...原创 2019-06-05 13:11:58 · 160 阅读 · 0 评论 -
P1071 潜伏者
题目地址易错点:"唯一对应"这一性质需要双向合法.#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int MAXN=2e2;char lock[MAXN],orignal[MAXN];char match[MAXN];boo...原创 2019-10-08 21:02:22 · 131 阅读 · 0 评论 -
P1068 分数线划定
题目地址#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<vector>using namespace std;const int MAXN=1e4;struct Person{ int index,score...原创 2019-10-07 23:34:50 · 189 阅读 · 0 评论 -
P3912 素数个数
题目地址#include<cstdio>#include<iostream>#include<cmath>using namespace std;const int MAXN=1e8;bool notPrime[MAXN];int notPrimeCnt=0;void initPrime(int x){ int tot=sqrt(x+0...原创 2019-10-03 02:17:02 · 640 阅读 · 0 评论 -
P1075 质因数分解
题目地址#include<cstdio>#include<iostream>using namespace std;int main(){ int n; scanf("%d",&n); for(int i=2;i<=n;i++){ if(!(n%i)){ printf("%d\n",n/i); break; } }...原创 2019-10-02 10:12:19 · 131 阅读 · 0 评论 -
P2563 [AHOI2001]质数和分解
题目地址易错点:转移时直接使用+=即可.#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int MAXN=300;int primes[MAXN],primeCnt=0;bool notPrime[MAXN];void init...原创 2019-10-02 10:38:15 · 253 阅读 · 0 评论 -
P1835 素数密度
题目地址基本思路:将区间内质数离散化到空间大小为1e6的数组中.易错点:需要特判l==1和l/primes[i]>1的情况.#include<cstdio>#include<iostream>#include<cstring>#include<cmath>using namespace std;const int...原创 2019-10-02 10:47:47 · 491 阅读 · 1 评论