套路题
AKone123456
这个作者很懒,什么都没留下…
展开
-
不要62--------------------------------思维(数位dp)
解析:预处理:f[i][j]:表示第i位,最高位为 j限制条件:最高位不能选4 第i位不能选6且第i-1位不能选2所以状态转移:f[i][j]+=f[i-1][k] (j!=4 && k!=4 &&(j!=6&&j!=2))数位dp分析:在树上进行决策对于第An-1位0~An-1-1 放到左子树 An-1 放到右子树计算左子树可能的情况 因为不能存在4或者62连起来的。所以用一个last记录 上一位是什么满足 (j!=4&.原创 2020-09-22 18:52:58 · 115 阅读 · 0 评论 -
位运算之谜---------------------------思维(位运算技巧+套路题)
解析:a xor b 相当于是不进位的加法(a&b)<<1 表示加法的进位所以得出公式 a+b == a xor b +(a&b)<<1那么 a xor b ==a+b-2*(a&b)又因为 a+b=x, a&b= y;所以 a xor b = x-2*y;存在两种不可能的存在,第一种就是a xor b <0第二种就是 a xor b 和 a&b 是相互取反的。其他情况只要输出 x-2y 即可#inclu..原创 2020-09-21 15:47:18 · 426 阅读 · 0 评论 -
问题 E: Songwriter------------------思维(构造)
解析:我们先从后往前遍历求出每个位置的可以取值范围的上下限设up[i]:为第i位置的上限设down[i]:为第i位置的下限分为三种情况第一种情况 a[i]==a[i+1] 那么up[i]=up[i+1],down[i]=down[i+1]第二种情况 a[i]<a[i+1] 那么上限最多up[i]=up[i+1]-1;那么下限down[i]=max(down[i+1]-k,l) 要么就是前一个的下限-k 要么就是l 两者取最大第三种情况 a[i]>a[i+1] 那么下限就是...原创 2020-08-31 13:46:31 · 137 阅读 · 0 评论 -
问题 K: Addition Robot---------------------------思维(线段树维护矩阵乘法)
解析:线段树维护区间矩阵乘法。每个节点都要维护矩阵因为本题有两个公式 A=A+B; B=A+B矩阵A: [AB]\begin{bmatrix}A &B\end{bmatrix}[AB] * [1011]\begin{bmatrix}1 & 0\\ 1 & 1\\\end{bmatrix}[1101] = [A+BB]\begin{bmatrix}A+B & B \end{bmatrix}[A+BB]矩阵B: [AB]\begin{...原创 2020-08-31 12:41:45 · 166 阅读 · 0 评论 -
问题 A: 20190-----------------------思维(组合递推+套路)
解析:由于要按照2019这个顺序递推,所以设‘2’=a ‘0’=b ‘1’=c ‘9’=d递推的方程式a=(a+1)%MODb=(b+a)%MODc=(c+b)%MODd=(d+c)%MOD这样就可以保证顺序的问题不会出错#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MOD=1e9+7;ll a,b,c,d;char s[1000005];int main(..原创 2020-08-29 23:45:16 · 93 阅读 · 0 评论 -
E. Clear the Multiset-------------------思维(分治+套路)
题意:给定n个数,2种操作第一种操作:横切切到底第二种操作:竖切切到底请问最少操作使得n个数为0解析:第一种横切得贡献是每次找到最小的然后切去,然后分治递归下去,详细看代码第二中竖切得贡献是r-l+1;两者取最小值。#include <bits/stdc++.h>using namespace std;const int N=1e5+100;int a[N];int n;int solve(int l,int r){ if(l>r) return..原创 2020-08-26 21:43:02 · 165 阅读 · 1 评论 -
Greedy Sequence----------------------------思维(记忆化)
题意:题意: 从1到n一行内输出si,si为数字i开头的满足题目要求的序列长度。题目要求此序列满足:1.相邻两元素在原数组中的距离不超过k。2.Sij<=sij-13.序列中无重复元素。解析:解法很暴力很思维我们用第二个测试样例来讲解S1 1 1S2 2 1S3 3,1 2S4 4,3,1 3S5 5,2 ...原创 2020-07-11 14:33:27 · 168 阅读 · 0 评论 -
The beautiful values of the palace---------------------------思维(树状数组+扫描线)
题意:给定一个n*n的螺旋矩阵,每个方格的权值为当前数字各位之和,现在给出m个宝殿的坐标。再给出q个询问,询问给出的矩形中宝典的权值之和解析:这道题最难的地方就是给定坐标求出螺旋矩阵对应的权值给出对应代码,细节大家自己看ll getval(ll x, ll y, ll n) { ll t = min(min(x, y), min(n - x + 1, n - y + 1)); ll ta = 4 * (t - 1) * (n - t + 1); if (x == n - t + 1) ...原创 2020-07-10 22:50:39 · 151 阅读 · 0 评论 -
小AA的数列---------------------思维(异或前缀和)
解析:一看到异或题目,我们就要按位处理求贡献了。本题又因为求的是异或和之和,所以我们求出异或前缀和。那么[L,R]的异或和之和就是 a[R]^a[L-1]本题要求的区间长度必须是偶数,那么(L-1)和R必须同偶数或者同奇数,这样的话(L-1)到R区间长度就是偶数那我们肯定要枚举讨论a[R]和a[L-1]带来的贡献是多少我们按照每一位处理,而且还要处理R和(L-1)是否为同偶数或者同奇数所以用f[0/1][0/1]表示第一维:第i位是1还是0第二维:当前(L-1)和R是奇数还是偶数好现在..原创 2020-07-10 15:32:43 · 257 阅读 · 0 评论 -
防线-----------------------------------思维(前缀和+二分+套路题)
解析:1.根据题目所述,最多只有一个位置数量是奇数,那么说明所有位置上的数量之和也一定是奇数。因为奇数+偶数=奇数2.我们通过二分来确定位置。如果[l,mid]的数量总和是奇数那么就缩小范围,反之[mid+1,r]这部分肯定是偶数了。3.数量总和可以用前缀和表示sum[x]:表示第x个位置之前所有位置上数量之和。那么可以O(n)求解出总和。假设s<=x 那么它们之间防具的数量=(min(e,x)-s)/d+1;#include<bits/stdc++.h>using...原创 2020-05-11 15:05:12 · 194 阅读 · 0 评论 -
士兵--------------------------------思维(套路题)
解析:对于y轴 移动到同一水平线 。那么就将y轴坐标排序,求中位数即可、对于x轴,假设有3个数x1,x2,x3 要移动到a,a+1,a+2那么x轴需要移动的次数 |x1-a| +|x2-(a+1)|+|x3-(a+2)|转化一下就是: |(x1)-a|+|(x2-1)-a|+|(x3-2)-a|+…+|(xn-(n-1))-a|处理一下x数组,又转化成求中位数的问题次数=处理y轴次数+处理x轴次数#include<bits/stdc++.h>using namespace ..原创 2020-05-10 00:15:30 · 244 阅读 · 0 评论 -
七夕祭-----------------------------思维(排序+中位数)
解析:明天写解析,现在写概率!!!!#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+1000;int n,m,q;int row[N],col[N],x,y;int sum[N];int c[N];ll work(int n,int a[]){ ...原创 2020-05-04 23:12:19 · 243 阅读 · 0 评论 -
奇数码问题-----------------------(性质+归并排序)
解析:**奇数码性质:**从奇偶性出发如果初始状态的逆序对个数 和 最终状态的逆序对个数 同奇偶性,则一定可以达到最终局面#include<bits/stdc++.h>using namespace std;const int N=1e6+1000;typedef long long ll;ll ans,res;int n;int a[N];int tmp[...原创 2020-05-03 11:20:27 · 836 阅读 · 0 评论 -
糖果传递---------------------------------思维
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e6+10;ll a[N],s[N],c[N];int n;int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; ...原创 2020-05-08 14:59:03 · 213 阅读 · 0 评论 -
最大的和---------------------思维
解析:从求最大子段和思想出发。对于二维矩阵我们按照列枚举一段上面有两个蓝颜色的方块,代表着两列。我们把这两列用前缀和表示。就转化成一维的求最大子段和问题了。所以我们只需要枚举即可#include<bits/stdc++.h>using namespace std;const int N=150;int g[N][N];int n;int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<..原创 2020-05-09 22:59:28 · 134 阅读 · 0 评论 -
问题 F: 魔法石-------------------------思维(二分)
题目描述你习得了魔法,并学会了熟练运用魔法石。你得到了n颗魔法石,魔法石有两种属性,分别为火属性和水属性。你一开始得到的是这n颗魔法石的一个排列。定义这n颗魔法石释放出来的能量,为最长的属性相同的魔法石连续段的长度。作为一名熟练的魔法师,你还可以至多修改k个魔法石的属性。你现在想知道这n颗魔法石最多可以释放出多少能量。输入第一行为两个正整数n,k,表示魔法石的个数和最多可以修改的魔法石数...原创 2020-05-06 22:34:09 · 483 阅读 · 0 评论 -
智乃与无意义的题目----------------------------------思维(二维线段树+性质+套路题)
解析:v非常的小而且我们找约数的个数,那么肯定想到唯一分解定理。通过唯一分解,我们只要维护2,3,5,7,9 这五个数出现的次数。用二维线段树维护这5个数出现的次数查询的时候只要通过唯一分解定理公式即可求解加粗样式#include<bits/stdc++.h>using namespace std;const int MOD=998244353;const int ...原创 2020-05-03 19:35:57 · 181 阅读 · 0 评论 -
102. 最佳牛围栏--------------------------思维(二分+套路题)
农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头。约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。围起区域内至少需要包含 F 块地,其中 F 会在输入中给出。在给定条件下,计算围起区域内每块地包含的牛的数量的平均值可能的最大值是多少。输入格式第一行输入整数 N 和 F ,数据间用空格隔开...原创 2020-04-29 16:32:30 · 365 阅读 · 0 评论 -
Rinne Loves Xor---------------------思维(按位前缀和+套路题)
解析:我们Ci 可以化简成这种题通常就是套路题:我们按位异或处理 求每一位的贡献统计前i个数二进制1和0出现的次数假设当前是第i位,那么贡献就是 A的第i位1的个数 * B的第i为0的个数+A的第i位0的个数 * B的第i位1的个数最后乘上 2i;#include<bits/stdc++.h>using namespace std;typedef long lo...原创 2020-04-28 22:27:49 · 195 阅读 · 0 评论 -
Circuit Counting---------------------------------思维(dfs)
题意:给定n个向量,任选向量使其相加和为0的方案数解析:n的范围非常小,爆搜240会超时,我们可以优化我们一半一半的搜 时间复杂度就优化成 2*220前一半搜索我们标记一下哪些数的出现,后一半搜索就计算贡献#include<bits/stdc++.h>#define x first#define y secondusing namespace std;int n...原创 2020-04-20 09:41:03 · 178 阅读 · 1 评论 -
Safe Passage-----------------------------------思维(经典贪心过河问题)
解析:经典过河问题N个人,只有一条船,每个人都有一个划船速度,要求让N个人过河,一次渡河包括两个人先过去,一个人再回来。每次时间取两个人之间用时最多的,一个人的时候的时间就是他自己所用的。求让N个人过完河所用的最短时间。思路:先按照时间由短到长排序 分情况讨论第一种情况 最快的依次把最慢,次慢送过去 耗费 t[n]+t[1]+t[n-1]+t[1]第二种情况 最快的和次快的先过去 ...原创 2020-04-19 20:03:42 · 239 阅读 · 0 评论 -
最短路变短了------------------------------------思维(最短路+套路题)
解析:用dij预处理出1到其余点的最短路,和n到其余点的最短路设最初的最短路为dn如果(x,y)这条路,路径反转使得最短路变短了。说明新的最短路一定经过这条边所以我们只要计算1->y + n->x + w(x,y) < dn 如果满足输出YES否输出NO#include<bits/stdc++.h>#define x first#define ...原创 2020-04-11 13:55:27 · 456 阅读 · 0 评论 -
被3整除的子序列-----------------------------dp(整除倍数型dp求方案数)
解析:这种线性dp也是一个套路题突破口:对3的余数处理f[i][02]:表示前i个数之和%3余(02)的所有情况所以我们只要枚举余数的状态即可状态转移方程:f[i][j]=f[i-1][j]+f[i-1][(j+3-m)%3]f[i-1][j]:表示第i个数不选,选第i-1个且余数为j的f[i-1][(j+3-m)%3] :表示第i个数选,因为我们枚举的是j,我们要判断第i-1...原创 2020-03-30 16:23:58 · 156 阅读 · 0 评论 -
问题 E: 矩阵转换---------------------------------------------思维(套路题)
题目描述冬冬获得两个大小为n行m列的矩阵A和B,每个矩阵仅包含0和1。冬冬可以对矩阵A进行任意次数以下的操作:取矩阵A的任何具有至少两行和两列的子矩阵,并反转其四个角上的值(即0变成1,1变成0)。冬冬想知道A是否能转换成B。输入测试包含多组数据,第一行输入一个正整数t(3≤t≤10)表示测试数据的组数。接下每每组测试数据的输入如下:第一行输入两下正整数n,m(2≤n,m≤500),...原创 2020-03-30 13:51:46 · 481 阅读 · 0 评论 -
问题 M: Construct Sequences----------------------------------------思维(构造+套路题)
题目描述You are given a permutation p of the set {1,2,…,N}. Please construct two sequences of positive integers a1, a2, …, aN and b1, b2, …, bN satisfying the following conditions:·1≤ai,bi≤109 for all i...原创 2020-03-30 11:45:03 · 283 阅读 · 0 评论 -
问题 A: 统计-----------------------------------------------思维(离散+二分)模板
题目描述给定n个数,有m个询问。每次询问, Alice想知道区间内[l, r]内是否出现过xi这个数。输入第一行一个整数n。第二行n个正整数ai。第三行一个整数m。接下来m行每行三个整数li, ri和xi, 表示询问区间为[li, ri], 询问数字为xi。输出对于每个询问,输出一个字符。‘0’表示没出现,‘1’表示出现了。样例输入 Copy51234567 666666 3...原创 2020-03-29 10:00:48 · 361 阅读 · 0 评论 -
Rounding Many Ways------------------思维(套路)
题意:XY=10^Z,XW=N给定N,求有多少个X解析:由第一个式子可知:10的幂次的因子只有2和5所以分解N有多少个2和多少个5,然后组合起来即可#include<bits/stdc++.h>using namespace std;typedef long long ll;ll n;ll quick(ll a,ll b){ ll res=1; whil...原创 2020-03-26 12:56:41 · 138 阅读 · 0 评论 -
问题 J: Shorten Diameter-------------------------------思维(图论+树的直径)
题目描述Given an undirected tree, let the distance between vertices u and v be the number of edges on the simple path from u to v. The diameter of a tree is the maximum among the distances between any tw...原创 2020-03-24 22:41:45 · 250 阅读 · 0 评论 -
E - Dividing Chocolate-------------------------------思维(二进制枚举)
题意:给你h长,w宽矩阵 的黑白巧克力,1代表是白色,0是黑色每次可以行切一刀,列切一刀,一切就要切到底的那种问最多切多少刀,使得每一块巧克力中白色的数量小于等于k个解析:突破口:n非常的小,我们枚举2^(n-1)个状态,这里枚举的是横切。然后再暴力枚举竖切#include<bits/stdc++.h>using namespace std;const int N...原创 2020-03-23 18:01:36 · 280 阅读 · 0 评论 -
Mooo Moo------------------------------------思维(完全背包变形)
解析:题目给出的是每个牧场音量的总和,所以我们要算出每个牧场实际发生的音量,记录发生最大的音量是多少。然后我们跑完全背包,物品数就是b头奶头的音量,体积就是最大音量。最后我们在累加每个实际音量需要奶牛的最小数#include<bits/stdc++.h>using namespace std;const int N=1e6+10;int f[N];int a[N]...原创 2020-03-23 13:04:05 · 195 阅读 · 0 评论 -
问题 B: 会议------------------------------思维(树的重心+dfs/bfs+套路题)
题目描述有一个村庄居住着n个村民,有n-1条路径使得这n个村民的家联通,每条路径的长度都为1。现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那么村长应该要把会议地点设置在哪个村民的家中,并且这个距离总和最小是多少?若有多个节点都满足条件,则选择节点编号最小的那个点。输入第一行。一个数n,表示有n个村民。接下来n-1行,每行两个数字a和b,表示村民a的家和...原创 2020-03-22 23:56:39 · 215 阅读 · 0 评论 -
问题 L: Crested Ibis vs Monster--------------------------------------------思维(完全背包)
题目描述Ibis is fighting with a monster.The health of the monster is H.Ibis can cast N kinds of spells. Casting the i-th spell decreases the monster’s health by Ai, at the cost of Bi Magic Points.The ...原创 2020-03-22 23:11:02 · 174 阅读 · 0 评论 -
D. Present----------------------------------思维(二进制位)
解析:假设答案的二进制位上为1,那就说明有奇数对(aj+ak)在此位置上产生贡献,因为偶数异或一定为0.对于高于该位置的1,对当前答案是不影响的所以可以模掉那么0<=aj<=2k+1-1 所以 0<=aj+ak<=2(k+2)-2那么对答案贡献的区间为[2k,2k+1-1]U[2k+1+2k,2(k+2)-1]我们枚举ak 那么区间就变为[2k-aj,2k...原创 2020-03-18 12:36:27 · 107 阅读 · 0 评论 -
问题 L: Rem of Sum is Num--------------------------------思维(套路题)
题目描述Given are a sequence of N positive integers A1,A2,…,AN, and a positive integer K.Find the number of non-empty contiguous subsequences in A such that the remainder when dividing the sum of its el...原创 2020-03-17 17:27:47 · 263 阅读 · 1 评论 -
任意进制转换(2~36)---------------------------------Java 大数
import java.math.BigInteger;import java.util.*;public class Main{ public static void main(String args[]) { Scanner scan=new Scanner(System.in); String str=scan.next(); int a=scan.nextInt()...原创 2020-03-11 10:41:23 · 123 阅读 · 0 评论 -
斐波那契-----------------------------思维(结论)
解析:斐波那契数列的前n项平方和=f(n) * f(n+1)第n项和第n+1项用矩阵快速幂求即可#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;typedef long long ll;const int mod=1e9+7;const in...原创 2020-03-11 10:38:52 · 247 阅读 · 0 评论 -
货物种类--------------------------------------差分+stl大法
解析:差分+stl大法用map存差分对于每一个仓库 有<种类,个数> 所以用差分然后枚举仓库,枚举仓库的种类#include<bits/stdc++.h>using namespace std;const int N=1e5+10000;map<int,int> v[N],now;int n,m,l,r,d;int main(){ s...原创 2020-03-09 17:16:46 · 72 阅读 · 0 评论 -
C. Cow and Message------------------------思维(套路题)
Bessie the cow has just intercepted a text that Farmer John sent to Burger Queen! However, Bessie is sure that there is a secret message hidden inside.The text is a string s of lowercase Latin letter...原创 2020-03-04 22:03:24 · 283 阅读 · 0 评论 -
玉米田----------------------------状压dp
农夫约翰的土地由M*N个小方格组成,现在他要在土地里种植玉米。非常遗憾,部分土地是不育的,无法种植。而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘。现在给定土地的大小,请你求出共有多少种种植方法。土地上什么都不种也算一种方法。输入格式第1行包含两个整数M和N。第2…M+1行:每行包含N个整数0或1,用来描述整个土地的状况,1表示该块土地肥沃,0表示该...原创 2020-03-02 14:17:01 · 215 阅读 · 0 评论 -
F. Moving Points-------------------------思维(二维树状数组) +套路
There are n points on a coordinate axis OX. The i-th point is located at the integer point xi and has a speed vi. It is guaranteed that no two points occupy the same coordinate. All n points move with...原创 2020-03-02 13:26:25 · 198 阅读 · 0 评论