题意 给定 $d,x$,$f(d,k)$ 表示 $1 \sim k$ 中 $d$ 出现的次数, $k$ 满足 $f(d,k) = k$,求小于 $x$ 的最大的 $k$. 分析 正解不会...,学习了oeis大法. 打表得到前几个数字,然后取oeis上找完整的. 之所以能这么做,是因为 $k$ 只有有限个.其中最大是 $d=8$,也只有344个 (oeis A130430). #include <bits/stdc++.h> using namespace std; typedef long…
题目描述 Tom has a string containing only lowercase letters. He wants to choose a subsequence of the string whose length is k and lexicographical order is the smallest. It's simple and he solved it with ease.But Jerry, who likes to play with Tom, tells h…
今天悲剧了,各种被虐啊,还是太年轻了 Crime 这道题目给的时间好长,第一次就想到了暴力,结果华丽丽的TLE了. 后来找了一下,发现前24个是1, 2, 6, 12, 72, 72, 864, 1728, 13824, 22032, 555264, 476928, 17625600, 29599488, 321115392, 805146624, 46097049600, 36481536000, 2754120268800, 3661604352000, 83905105305600, 19…
2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或者说A‾\overline{A}A表示DA→\overrightarrow{DA}DA旋转180°之后的方向. block(A,B)block(A,B)block(A,B)表示的是DA→\overrightarrow{DA}DA旋转到DB→\overrightarrow{DB}DB的扫过的几何区间.…
__int128(例题:2020牛客多校第八场K题) 题意: 有n道菜,第i道菜的利润为\(a_i\),且有\(b_i\)盘.你要按照下列要求给顾客上菜. 1.每位顾客至少有一道菜 2.给顾客上菜时,都必须从第一道菜开始,上连续的编号的菜,例如,你可能给一位顾客 上的菜为第一道,第二道,第三道,但是不能为只上第二道而不上第一道,或者第一道,第三道中间缺少第二道. 求这些菜能够容纳的最大顾客数,并且求出在容纳最多顾客时的利润最大为多少. 数据范围 \(1\le n\le 10^{5}\),\(-1…
题目链接 传送门 题意 两个绝顶聪明的人在树上玩博弈,规则是轮流选择下一个要到达的点,每达到一个点时,先手和后手分别获得\(a_i,b_i\)(到达这个点时两个人都会获得)的权值,已经经过的点无法再次经过,直到无法移动则结束游戏,两人都想最大化自己的权值和减对手权值和,问先手减后手权值和最大是多少. 思路 换根\(DP\),和求树的直径有点类似. \(dp[i][j]\)表示在\(i\)这个结点状态为\(j\)时先手权值和减后手权值和最优是多少,\(j\)为偶数表示当前是先手,为奇数时为后手.…
题意 给出两个矩形,问这两个矩形把平面分成了几部分. 分析 不需要什么高级技能,只需 “简单” 的分类讨论. (实在太难写了,对拍找出错误都不想改 推荐博客,其中有个很好的思路,即只讨论答案为2,3,5,6的情况,其余都为4,这样可以省掉一些麻烦. #include <bits/stdc++.h> using namespace std; int main() { int x11, x12, y11, y12; int x21, x22, y21, y22; int x1, y1, x2, y…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6667 题目大意是说n个班级,每个班级有ai人和bi杯茶,每个人只能喝其他班的茶并且只能喝一杯.问最多有多少人可以喝茶. 读完题就觉得是网络流or二分图,然后发现数据范围就萎了,开始想怎么转化模型,因为题目实际就是求每个人连其他班的茶之后跑二分图最大匹配. 然后想到了hall定理和推论,好像对于线性求解二分图蛮有帮助的,公式写出来大致就可以明白了. PS:|X|为点集X的点数 hall定理: 二分图G…
题目描述 In computer science, a character is a letter, a digit, a punctuation mark or some other similar symbol. Since computers can only process numbers, number codes are used to represent characters, which is known as character encoding. A character en…
很多题解都是简单带过,所以打算自己写一篇,顺便也加深自己理解 前置知识:线段树.线段树维护最大字段和.二维坐标离散化 题解: 1.很容易想到我们需要枚举所有子矩阵来得到一个最大子矩阵,所以我们的任务是 “枚举所有子矩阵”, 二维前缀和暴力枚举达到O(n^4),  DP结合前缀和枚举也需要O(n^3),然而我们的时间需要更少. 2.可以看到坐标范围为 -10^9~10^,但是点 n<=2000个,所以我们需要先将点 离散化. 3.将点 按y轴高度排序,枚举矩阵的上下界,这将达到O(n^2)了. 4…
目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)E_Explorer) 题意: 链接 题目类似:CF366D,Gym101652T 本题给你\(n(100000)\)个点\(m(10000)\)条边,每无向边允许通过编号在\([Li,Ri](1\le Li\le Ri\le 1e9)\)内的人,问从\(1\)到\(n\)能通过多少个人. 分析: 赛中艹了30多发暴力无济于事... 因为以前做过一道数据范围1000的原题,当时做法好像是离散化后枚举区间暴力跑\(dfs\)查询或者带着…
解题报告:题目的意思是输入一个字符串,并规定,里面的“hehe”可以用"wqnmlgb"来代替,也可以不代替,问输入的这个字符串在经过相关的代替之后可以有多少种不同的形态.先打一个斐波那契数的表,f[1] = 1,f[2] =2....,然后从前往后扫一遍字符串,将一段连在一起的"he"一起计算,若这一段里面有 n 个 "he" ,然后这一段就有f[n]种不同的形态,然后一直这样扫下去,把每一段的状态数都相乘,就是最后的结果,不过,要注意的是用到…
#include<bits/stdc++.h>using namespace std;int a[100010];char s[20];int zhiren[100010];vector<int>haoren[100010];int sum=0;void dfs(int x,int y,int flag){    if(x==y)        flag=1;//如果和被指认的人相同,则定为狼    sum+=flag;//并且后面直接或间接认为刚才那个是狼的人是好人的人也都是狼 …
Problem I. Count Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 42    Accepted Submission(s): 16 Problem Description Multiple query, for each n, you need to getn i-1∑ ∑ [gcd(i + j, i - j) = 1…
题意:让你找最大不可扩展全1子矩阵的数量: 题解:考虑枚举每一行为全1子矩阵的的底,然后从左到右枚举:up[i][j]:表示(i,j)这个位置向上可扩展多少,同时还有记录每个位置(i,j)向左最多可扩展到哪个位置pos; 用单调栈维护一个递增的{up[i][j],pos},如果当st.top.first>up[i][j]时,表示栈顶的元素最右可扩展到j-1; lzero:表示下一行最右0所在位置,如果st.top.second<=lzero则表示该栈顶所表示矩阵不可再往下扩展,则对答案贡献1:…
题目链接 传送门 思路 这个题在\(BZOJ\)上有个二维平面的版本(\(BZOJ2716\)天使玩偶),不过是权限题因此就不附带链接了,我也只是在算法进阶指南上看到过,那个题的写法是\(CDQ\),然后比赛开始半个小时我就开始写\(CDQ\),\(T\)了之后冷静分析发现复杂度我少算了个\(log\),\(CDQ\)写这题的复杂度是\(nlog^3(n)\),然后就没思路了. 赛后看\(qls\)说用三维\(bit\)可以过后试了一下\(T\)了,然后发现\(qls\)的代码当时跑了\(937…
题目链接 传送门 题意 给你一张无向图,每条边\(u_i,v_i\)的权值范围为\([L_i,R_i]\),要经过这条边的条件是你的容量要在\([L_i,R_i]\),现在问你你有多少种容量使得你可以从\(1\)走到\(n\). 思路 跟着大佬们的代码学了波可撤销并查集和线段树骚操作,感觉自己好菜啊. 首先我们用并查集来维护哪些边的权值范围在线段树结点对应的区间内,用\(vector\)来存下结点编号(注意由于区间范围太大我们需要离散化建左闭右开线段树).在查询的时候一路向下,将经过的结点存的所…
题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问题,一般解决就是两个方向: A:压缩一维,即枚举上下边界,然后复杂度O(N^3); B:广告牌问题,即枚举下边界s,那么久可以看成s为底的一些高楼,再高楼上布置广告牌,复杂度O(N^2). } 这里光看复杂度我们就能看出肯定是B类问题,我们之前已经知道怎么求出每个矩阵了,但是我们怎么确定他是最大不可延伸的…
目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)D_Distance) 题意: 在三维空间\((n\times m\times h\le 100000)\)内,有\(q(q\le 100000)\)次操作.操作\(1\):添加一个点进入空间:操作\(2\):查询最近点对. 分析: 比赛时听G黄说完题意感觉看似好像裸题,一道在二维平面上操作完全的题:BZOJ2716 那么KD-Tree还是四维偏序问题呢?(原来都不是..出题人放出豪言:KD-Tree想过?不可能的 解法1:三维BIT…
All-one Matrices 题意 对于一个n,m的01矩阵,问有多少个极大矩阵. 分析 对于悬线法来说,其过程就是枚举极大矩阵的过程,那如何计数呢?对于一个点来说,若其左右边界包含了上一个点的悬线后的连续边界,那么该点悬线出来的矩阵就被上一行的已经枚举过的矩阵所覆盖了,反之则没有覆盖cnt++,对于一行中左右同属于一个极大矩阵如何去重呢?只需要纪录一下这一行中,上一个枚举的极大矩阵的左右边界,和当前的对于一下即可.对于当前点高度为1的时候,需要进行特判去重,逻辑类似. #include<b…
涉及的知识点挺多,但是大多是套路 1.求曼哈顿距离的最值一般对所有情况进行讨论 2.三维树状数组用来求前缀最大值 /* 有一个三维坐标系(x,y,z),取值范围为[1,n],[1,m],[1,h],有两种操作 1.在三维坐标系上更新一个点(x1,y1,z1) 2.给定一个点(x2,y2,z2),问在坐标系上离该点Manhattan距离最短的点 即最小的 |x2-x1|+|y2-y1|+|z2-z1| 令 f=|x2-x1|+|y2-y1|+|z2-z1|,那么可以讨论去绝对值后f的八种情况 f0…
看了解题报告,发现看不懂 QAQ 比较简单的解释是这样的: 可以先暴力下达标,然后会发现当前数 和 上一个数 的差值是一个 固定值, 而且等于当前数与i(第i个数)的商, 于是没有规律的部分暴力解决,有规律的套公式 //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> #include <iostream> #include <cstring&g…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6312 Problem Description Alice and Bob are playing a game.The game is played on a set of positive integers from 1 to n.In one step, the player can choose a positive integer from the set, and erase all of…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=6318 Problem Description Long long ago, there was an integer sequence a.Tonyfang think this sequence is messy, so he will count the number of inversions in this sequence. Because he is angry, you will ha…
一.题意 给出N个卡牌,卡牌的正反两面具有两个数字,取值范围为[1,2*n],给出若干个默认正面向上的卡牌,求最小反转多少张卡牌可以使得,每张卡牌朝上的面上都有一个不同的数字,同时满足最小反转次数的反转方法有多少个? Alice and Bob are playing a card game. In this card game, a number is written on each face of the playing card. The rule of the game is descr…
一.题意 给定一个序列,之后给出若干个修改,修改的内容为在原序列的基础上,将某一位元素的值改成给定的值<每次修改相互独立,不保存修改后的结果>.之后询问,在选择第一位元素的情况下,最长递增子序列的长度是多少. 二.题解 考虑不经修改的情况,应当设dp[i]为选取当前位情况下的最长递增子串的长度.则对于这道题,应当认为对于修改a为b,设l_pos为a左边最大的元素的位置,r_pos为a右边大于max(b,r_pos)的元素的位置.则有ans = dp[1] - dp[l_pos] + 1 + d…
#include<bits/stdc++.h> using namespace std; ][]; int main() { int t; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); !=&&m%!=) { ; i<n; i++) { ; j<m; j++) { printf("("); } printf(&q…
题目链接 题意,有m种颜色,给2n个位置染色,使左边n个和右边n个没有共同的颜色. 可以先递推求出恰用i种颜色染n个位置的方案数,然后枚举两边的染色数就可以了,代码很简单. #include<bits/stdc++.h> using namespace std; typedef long long LL; //求C(a,b) ,其中,a,b大小大概不超过1e6级别,很多组数据 ; ; LL fac[M+]; //阶乘 LL inv_of_fac[M+]; //阶乘的逆元 LL qpow(LL…
题目链接 比赛时没抓住重点,对那个受限制的“分数求和”太过关心了..其实如果先利用莫比乌斯函数的一个性质把后面那个[gcd(i,j)=1]去掉,那么问题就可以简化很多.公式如下 这和之前做过的一道题很相似..(见http://www.cnblogs.com/Just--Do--It/p/7326572.html) 这个式子显然是可以用分块+预处理mu[i]前缀和的方法来做. 预处理复杂度是O(n),分块解决单组询问复杂度是O(sqrt(n)) 求g[n]可以用递推式来解决. 对比g[n]和g[n…
模板题..去网上学了可撤销的并查集.. /* 给定一个无向图,边的属性为(u,v,l,r),表示<u,v>可以通过的size为[l,r] 求出有多少不同的size可以从1->n 把每条边的范围[l,r]进行区间离散化然后 建立线段树,然后把每条边按范围更新进线段树里 对线段树进行dfs,同时维护一个可撤销的并查集,经过每个线段树结点都用结点里存的边去更新并查集 到了叶子结点,如果发现[1,n]在同一个集合里,说明联通,那么把这个区间的贡献算上 回溯时要对并查集进行撤销 */ #inclu…