- 博客(108)
- 收藏
- 关注
原创 acwing25数论
分解质因数#include <iostream>#include <algorithm>using namespace std;void divide(int x){ for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) { int s = 0; while (x % i == 0) x /= i, s ++ ;
2021-04-29 20:57:51 551 3
原创 (面向对象上机编程总结)
要求创建 Circle、Square、Triangle 的对象,用基类指针指向这些对象,并调用成员函数。现在要求实现以下 Guest 的成员函数:构造函数、Show()显示 Guest 的信息、 GetCount()返回当前酒店入住的人数、GetTotalIncome()返回当前酒店的总收入。它拥有一系列虚函数:Input()输入类需要的信息、Show() 显示类的信息、Perimeter()计算周长、Area()计算面积。定义一个客人类 Guest。并定义 3 个 Guest 对象来对成员函数进行测试。
2024-01-09 14:19:02 736
原创 B - Reverse Binary Strings(思维)
B - Reverse Binary Strings题意:给定一个长度为偶数的01串,0和1个数相等。每次可以选定一个子串进行翻转操作。要求最后翻转成一个0,1交替的串(相邻不同即可)。思路:这道题要从相邻不同来考虑,如果存在一个相邻相同的串,如:10101001 , 那我们一定可以把 00 这对点对通过和后边的串交换变成01交替的合法串。那么这个结论可以暂时记作☆☆☆10101001 -10101010 。再给出几组多个相邻相同的串:11100001 此处可见有2对相邻 1 , 3对相
2021-12-08 19:13:05 1490 1
原创 DP小题单【4】
经典换根DP:#include<bits/stdc++.h>using namespace std;const int N=3e6+10;#define int long longint ne[N],h[N],e[N],idx;int f[N],siz[N],n,m,ans[N];int dp1[N],dp2[N],msz1[N],msz2[N];void add(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] =
2021-11-27 10:40:13 655
原创 DP小题单【3】
P1272 重建道路P1272 重建道路------树形DP题意:在树上通过断边的形式,保留 k 个点,问你断开的最小边数。思路:保留点问题一般都类似于树上背包,先预处理出每个点的子树的点的个数。定义f[i][j]f[i][j]f[i][j]表示以iii为根的子树,保留 jjj 个点需要删掉的最小边数。而且在f[i][j]f[i][j]f[i][j]中,我们要强制根节点必选。我们可以初始化f[i][1]=0f[i][1] = 0f[i][1]=0 表示以 iii 为根的子树 保留一个点 ,且不
2021-11-25 11:05:14 444 1
翻译 acwing28树形DP
树形DP板子题:树的直径和距离:1072. 树的最长路径直径:#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=2e5+10;int ne[N],h[N];int e[N],idx;int w[N];int ans;int dfs(int u,int father){ int dist=0; int d1=0
2021-11-23 19:43:17 116
原创 DP小题单【2】
题目列表见:DP小题单【1】单调队列维护窗口最值acwing模板题最大子序和#include<bits/stdc++.h>using namespace std;typedef long long LL;int n,m;const int N=3e5+10;int a[N];int q[N];int main(){ cin>>n>>m; for(int i=1;i<=n;i++) { cin>&
2021-11-23 12:46:06 496
原创 acwing提高课数论
阶乘分解题意:给定整数 NNN,把阶乘 NNN 分解质因数,按照算术基本定理的形式输出分解结果中的 质因子 和 对应次数。1≤N≤1061≤N≤10^61≤N≤106.思路: 这道题暴力的话是枚举1~N的每一个数,对每一个数分解质因数,然后求和,时间复杂度大概是n⋅nn·\sqrt{n}n⋅n,显然超时。首先 111——nnn 中所有质数的个数大概是nlogn\dfrac{n}{log_n}lognn,这个题大概是500005000050000左右。由算数基本定理可知,在 111——nnn 中对
2021-11-22 19:13:59 495 1
原创 DP小题单【1】
P1280 尼克的任务题意:1 n选k个任务,任务有起始和持续时间。k个任务到达后,同一个起始时间尼克可以挑选一个任务,其他任务交由别人处理,通过合理选择任务就可以得到一些任务之间的空隙——闲暇时间。求闲暇时间的最大值。题意 : 1 ~ n 选 k 个任务,任务有起始和持续时间。 k 个 任务到达后,同一个起始时间 尼克 可以挑选一个任务,其他任务交由别人处理, 通过合理选择任务就可以得到一些任务之间的空隙——闲暇时间。求闲暇时间的最大值。题意:1 n选k个任务,任务有起始和持续时间
2021-11-21 20:49:09 526 2
原创 C - Justice
C - Justice题意:n个物品,每个物品重量12k[i]\dfrac{1}{2^{k[i]}}2k[i]1,问可不可以分成两份,让这两份的总量都大于12\dfrac{1}{2}21,并输出具体方案。思路一:这道题可以用两个变量cnt1,cnt2cnt1,cnt2cnt1,cnt2来维护当前创造两份大于12\dfrac{1}{2}21 的物品所需求的最小值,比如初始化cnt1=1,cnt2=1cnt1=1,cnt2=1cnt1=1,cnt2=1。代表的就是完成事件需要12\dfrac{1}{2
2021-09-29 19:48:33 180
原创 The 2021 ICPC Asia Regionals Online Contest (II)补题
M Addition模拟进位,注意正负交替的进位。#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define int long longint n;int a[100],b[100],s[100];int lend[100];int p;//p表示在"+"意义下的进位——简称绝对意义signed main(){ cin>
2021-09-28 12:20:57 286
原创 AtCoder Beginner Contest 220
D - FG operation题意:给定一个长度为nnn的序列。(n=1e5n=1e5n=1e5)用FFF或GGG这两种操作交替进行,使得最左边的两个元素转换成(x+y)(x+y)(x+y)%10 或 (x∗y)(x*y)(x∗y) %10 ,显然在这2n−1次方种操作之后2^n-1次方种操作之后2n−1次方种操作之后,可以使序列得到一个唯一 一个元素,求这个元素的可能的方案个数。思路:线性dp更新状态。dp[i][j]dp[i][j]dp[i][j]表示的是前i个数中当前这个数为 j 所得到
2021-09-27 18:54:51 166
原创 The 2021 ICPC Asia Regionals Online Contest (I)[优先队列+set[二分]
#include<bits/stdc++.h>using namespace std;typedef pair<int,int> PII;const int N = 100010;int n, m;int cnt[N];void solve() { cin >> n >> m; set<int> s; for (int i = 0; i < n; i++) s.insert(i); prio..
2021-09-25 20:21:50 122
原创 Codeforces Round #742 (Div. 2) A~D补题
C. Carrying Conundrum题意:给定一种特定加法,十进制,但是一次是进两位,如图中6+5会进到0+9那一位,依次类推:给一个整数 n,求用两个正整数用特定加法得到 n 的方案数。(a,b)与(b,a)视为不同方案(a,b)与 (b,a) 视为不同方案(a,b)与(b,a)视为不同方案思路:奇数偶数单独拿出来看,就比如12345中的135和24,他们可以有各自的拆分,最后用乘法原理组合起来,比如:135=85+50,24=16+08135=85+50,24=16+08135=85+50
2021-09-22 21:09:02 103
原创 基础树状数组和线段树
楼兰图腾(树状数组)给定一个序列,要求你使用n⋅log(n)n·log(n)n⋅log(n)的时间算出序列中满足V形状的数列方案的个数和∧的数列方案的个数.V 形状的数列方案的个数和 ∧ 的数列方案的个数.V形状的数列方案的个数和∧的数列方案的个数.#include<iostream>#include<algorithm>#include<cstring>using namespace std;typedef long long LL;const int
2021-09-04 21:07:03 246 1
原创 SDUT 2021 summer team contest 8th (find函数替代kmp)
find函数——来自大佬Chelse。B - Breaking the Curse题意:给两个字符串s1,s2s1,s2s1,s2,以及 qqq 个询问,每个询问一个区间 l,rl ,rl,r,统计s1s1s1中每一个在区间内的连续子串在s2s2s2中出现的次数。思路:以第一个串按字符连续匹配,用find函数查找连续子串,具体见代码注释。#include <iostream>#include <cstring>#include <algorithm>usin
2021-08-23 10:24:15 139
原创 SDUT 2021 summer team contest 7th[dfs三色]
K - Assigning Frequencies题意:一张图,一些边,用三个颜色染色,使得相邻点不同色,判断是否存在方案。思路:类似于染色法判断二分图,但是不能用经典的染色方案,这个题可以Dfs暴力枚举出每一种方案,每一种方案都遍历之前的结点,看是否存在与当前节点同色的点,如果存在则返回false,如果递归到第n个点还没有return false则表明存在方案。#include <iostream>#include <cstdio>#include<cstring&
2021-08-19 21:39:02 112
原创 Codeforces Round #738 (Div. 2)
前四个题就A题难想一点,别的读懂题就可以写出来。结果这题卡我一个多小时A. Mocha and Math题意:给你一个序列,你可以对称的把区间里的aia_iai替换成ai+la_{i+l}ai+l & ar−ia_{r-i}ar−i,如上图。问你操作若干次之后序列中的最小值。思路:首先了解&的性质,AAA & B<=min(A,B)B<=min(A,B)B<=min(A,B),所以随着&操作的增加,值肯定是不断减少的,对于序列的某一个元素来说
2021-08-19 09:26:55 190
原创 AtCoder Beginner Contest 214
Distribution题意:给定两个序列,一个是宝石的把玩时间一个是宝石的产生时间,一个宝石在aia_iai产生之后,会在把玩时间之后传给 ai+1a_{i+1}ai+1 个人,求出每个人第一次得到宝石的时间。思路:每个人得到宝石的时间要么是自己产生的要么是前一个人传过来的,所以当前时间的最小值是前一个人的最短得到时间+把玩时间和自己的产生时间取最小值——dp。又因为是从小到大枚举,所以一个变量res就可以表示前一个人的最短时间,然后给每个人附上值即可。#include <algorit
2021-08-18 16:45:23 174
原创 AtCoder Beginner Contest 123
H - Five Dishes题意:很多菜,上菜只能在整点,做菜有时间,问如何最快上完菜。思路:因为每个出菜必须整点,所以离整点远的时间会被卡的时间比较长,除了最后一道菜,之前的菜无论怎么换顺序,改卡的时间都省不掉,所以显然只需要让最后一次卡的时间多一些,这样中间的有效时间才可以短。#include <iostream>#include <cstring>#include <algorithm>#include <vector>#include
2021-08-18 10:30:13 245
原创 AtCoder - abc211 [字符串dp]
E - Red Polyomino思路:给定一个由 " # " 和 ’ . ’ 构成的字符矩阵,求用 k 个 “@” 字符填充 “ . ” 并使得所有’@‘连通的方案数。样例如下:思路:dfs搜索′.′'.'′.′周围是否存在’@’,若存在,则当前 ‘.’ 也变成’ '@" , 要注意每一个中间状态dfs到最后要么是一种方案对答案贡献为1,要么最终没有贡献,所以多于每一个状态我们只遍历一次,用一个map来去重所有的中间状态,这样再把每一个达到最终状态的答案加起来。#include <iost
2021-08-18 09:51:20 370
原创 SDUT 2021 summer team contest 6th
A - Secrete Master Plan水题,直接模拟。#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5+10;int g[3][3];int k[5];bool check(int a[]){ for(int i=1;i<=4;i++) { if(a[i]!=k[i])
2021-08-17 10:42:00 123
原创 Codeforces Round #732 (Div. 2)
A. AquaMoon and Two Arrays题意: 给一个可操作数组a 和一个目标数组b ,每次操作选a 中两个元素,将其中一个−1− 1−1,另一个+1+ 1+1 . 但要保证所有元素一直是非负的。问有没有可能把a 数组变成b 数组。 如果可以,输出你的具体操作步骤。思路:暴力找大的减小的加,死循环判断直到数组全部相等。用两个 vector 分别存操作的下标,vector.size()可以查询操作次数。#include <bits/stdc++.h>using namespa
2021-08-17 09:51:11 96
原创 SDUT 2021 Summer Individual Contest - 7
J - Programming Tutors题目大意:给n个学生和n个教练的坐标,按对分配,使得学生和教练的最大距离最小,求出这个最大距离的最小值。思路:最大距离的最小值可以通过二分求得,之前接触过了。那么如何二分出一个最大距离的最小值需要用二分图最大匹配,最大匹配返回的是可以匹配的个数,如果个数是n的话,说明可以匹配,继续缩小版边界,最后二分的结果就是满足最大匹配的最小值。#include <iostream>#include<cstdio>#include<cst
2021-08-16 20:58:40 148 2
原创 数独(dfs)
数独对于一个4x4的数独矩阵补全,我们可以用暴力枚举的方法。受八数码的启发,数独标记可以完全降到一维。二维到一维坐标转化可以去看acwing八数码。这里主要是了解数独特有的一种标记方式——分块。因为对于一个n∗nn*nn∗n的数独矩阵,它的 子矩阵n∗n\sqrt{n}*\sqrt{n}n∗n也必须是数独矩阵,证明很简单我们可以假设存在两个相同的数处在同一子数独矩阵中,可以证明必然存在其他的子矩阵出现重复。所以这个4⋅44·44⋅4的矩阵就把它划分为2⋅22·22⋅2的矩阵去标记,使用分块数组,
2021-08-15 11:05:01 346
原创 SDUT 2021 summer team contest 5th补题
E - Fractions题意:给定 A,B,C,DA,B,C,DA,B,C,D ,使得xxx在A到B范围内,yyy在C到D范围内,1<=A<=1e12,1<=B<=1e12,1<=C<=1e12,1<=D<=1e121<=A<=1e12,1<=B<=1e12,1<=C<=1e12,1<=D<=1e121<=A<=1e12,1<=B<=1e12,1<=C<=1e12,1<
2021-08-12 21:01:07 280 1
原创 哈希
map<int ,int>定义:map是一种映射,内部实现是平衡树。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可以称为该关键字的(value);用法:insert() 插入两个数。erase() 输入两个数或者迭代器。find() 查找一个元素mp.count()是否存在某个元素,返回0或1更多用法可百度C++常用stl落谷:字符串哈希字符串哈希原理:首先要把字符串前缀处理成多个字符子串:把子串中每一个字符从高位到低位对应成一个p进制的数,
2021-08-12 09:56:07 332
原创 SDUT 2021 Summer Individual Contest - 6
SDUT 2021 Summer Individual Contest - 6B - XOR Matching 2#include <bits/stdc++.h>using namespace std;const int N = 2222;#define ll long longll a[N], b[N];vector<ll> res;int main() { int n; scanf("%d", &n); for (int i =
2021-08-12 08:48:38 149
原创 2018-2019 ACM-ICPC, NEERC, Southern Subregional Contest, Qualification Stage(夏季个人赛五)
F - Tickets题意:给定一个由六个数字组成的字符串数字,前三个字符数字的和与后三个字符数字的和做差取绝对值——key,称它每一个数字的幸运值。询问n次,问从1到当前这个数字,存在多少个比这个数字小且幸运值比当前这个数字小的数字。*一开始并没有考虑这道题的数据量问题,直接枚举每一位然后找答案,发现会超时。想到预处理了,但根本不知道如何存下来,在枚举的过程中的状态并不是很好存下来。看了题解才发现这个题原来是DP。 *思路:这道题不说完全是个DP题,也至少用到了滚动数组的思路。我们从小到大枚举,
2021-08-09 21:28:35 286
原创 SDUT 2021 summer team contest 4th(for 20)
D - Association for Control Over Minds题意:n个食谱,我们从上往下遍历,若能按照要求制造出该食物,则答案加1,要求食物的所有分量都成为一个联通块,对于某一个连通块的材料如果想要重复使用,必须保证该连通块的材料都出现在这个食谱上,即只能把某个材料的整个集合整体拿过来,但不可以把某个集合中的某个材料剥离使用。思路:因题意的不可剥离的提示,我们如果在食谱中出现了某个材料的需求,我们需要把这个材料的整个连通块全部拿过来,最好的情况是食谱中出现的材料都是之前形成的连通块的材料
2021-08-09 11:09:52 124
原创 2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest(夏季组队赛第三场)
A - Alex Origami Squares题意:用给定一个长度和宽度组成的一个长方形纸,裁减出三个边长相等的正方形。求这个正方形可能的最大边长。思路:我们拿最一般的长方形纸( 假设 m>nm>nm>n),一个边 mmm 从无穷递减,一个边 nnn 从0 增大,当n=mn=mn=m 时分析结束,因为nnn和mmm是对称的问题,所以我们假设当前长的边为 mmm 小的边为 nnn 即可。当 m>=3⋅n时m>=3·n时m>=3⋅n时,显然以左边 n=rn=rn
2021-08-06 15:18:31 295 1
原创 Codeforces Round #721 (Div. 2)
A. And Then There Were K题意:找最大的kkk使这个式子等于0。思路:从 nnn 的二进制数来看,假设最高位的1在第 iii位,那么想要消除掉这个1 , kkk 肯定要 ≤2i−1≤ 2^i-1≤2i−1 。假设我们要消除100100111001001110010011使其连续&为000,我们逐一递减直到消除最高位之前,一定会经历中间状态100000001000000010000000,因为是连续的&运算,所以此时的结果已经是1000000010000000100
2021-08-05 08:57:16 92
原创 SDUT 2021 Summer Individual Contest - 4(for 20)
Odd Palindrome题意:判断一个字符串的所有子串是不是都是回文奇数串。思路:枚举所有子串,如果存在偶数回文串就输出no。#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5+10;typedef long long LL;int n,t,a[N];string st;bool check(int l,int
2021-08-04 08:09:19 173
原创 ArabellaCPC 2019(夏季个人赛第三场)
D - Meeting Bahosain题意:给一个a数组,加减一个b数组的任意值,看能不能使得a数组全部相等。思路:如果存在某种转化,使得a的全部元素可以转化为aiaiai,那么对于a中任意元素都可以两两进行转化。就比如:∣a[i]−a[i−1]∣=∣a[i+1]−a[i]∣=x|a[i]-a[i-1]|=|a[i+1]-a[i]|=x∣a[i]−a[i−1]∣=∣a[i+1]−a[i]∣=x,且差值x在b数组中得以出现,那么我们可以认为a[i],a[i−1],a[i+1]a[i],a[i-1],a[
2021-08-03 10:08:00 289 1
原创 B. Cobb---Codeforces Round #735 (Div. 2)
B. Cobb题意:求 i∗j−k∗(a[i]∣a[j])i * j - k * (a[i] | a[j] )i∗j−k∗(a[i]∣a[j]) 的最大值。题解:因为区间太长不能n^2遍历,所以我们希望找到一组f(i,j), i~j区间尽可能小,遍历的范围尽可能小。因为题目给出的长度是 n ,所以以下说的 j 与 n 等价。对于一组f(i,j)=i∗j−k∗(a[i]∣a[j])f(i,j)= i * j - k * (a[i] | a[j] )f(i,j)=i∗j−k∗(a[i]∣a[j])
2021-07-31 09:42:02 270 3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人