- 博客(157)
- 收藏
- 关注
原创 Java入门之JavaSe(韩顺平+狂神说)
最终学习目标:学会使用Java框架集合SSM(开发场景之一)Java的三个体系:Java的跨平台性:JVM(虚拟机,Java virtual machine)包含在系统安装的JDK中。JDK介绍(Java Development Kit,Java开发工具包 )JDK = JRE + 开发工具(如java、javac、javadoc、javap)JRE介绍(Java Runtime Environment,Java运行环境)
2024-02-05 17:43:50 733
原创 NIM博弈
文章目录模型1:[P2197 【模板】nim游戏](https://www.luogu.com.cn/problem/P2197)模型2:台阶-Nim游戏模型3:集合-Nim游戏模型4:拆分-Nim游戏例题1:涛涛和策策的游戏Solution例题2:[P2575 高手过招](https://www.luogu.com.cn/problem/P2575)Solution1:Solution2:例题3:[P2148 [SDOI2009]E&D](https://www.luogu.com.cn/prob
2020-11-18 16:04:04 637
原创 P3178 [HAOI2015]树上操作 (树链剖分板子)
P3178 [HAOI2015]树上操作 题目描述: 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 树链剖分 模板来源 :https://www.bilibili.com/video/BV1xE411j7WF?from=search&seid=7017680147370733
2020-09-30 20:54:15 229
原创 Invoker(2019ccpc秦皇岛)
Invoker费了九牛二虎之力搞出来了,记录一下。道路很曲折,代码写完了才发现一开始无脑屏蔽掉了出现数次的unordered,常识地以为是ordered 。由于连招是无序的,并且三个连招只有六种排列组合,所以我们把每个连招可能的组合排列出来就可以转移状态了dp[i][j] 表示:到第 i 位 选择 第 j 种连招所获得的最小代价。所以每个 dp[i][j] 要从 第 i-1 位的 0 - 6 种 连招转移过来。最后就是两个连招相邻连招的节约计算;#include<bits/stdc++.
2020-09-22 17:46:05 196
原创 AtCoder Beginner Contest 176
链接D - Wizard in Maze题意: 在一个 H * W 的网格地图中,问从给定起点到终点要使用的最少魔法次数。行走规则:1、当相邻的位置为空地时可以直接走到下一个点而不使用魔法。2、否则使用一次魔法后可以把自己传送到以当前位置为中心的 5 * 5 的方阵的任一个空地位置。思路: 直接两个bfs嵌套搜索一下就????。#include<bits/stdc++.h>using namespace std;#define F first#define S secondt
2020-09-16 10:56:56 204
原创 C. Binary String Reconstruction (Round 94 字符串构造)
链接题意: 给出一个01字符串w 和 正整数 x,可以通过以下规则构造出 s :1、当 w[i-x] 存在 且 w[i-x] ==‘1’ 时 s[i] = ‘1’;2、当 w[i+x]存在 且 w[i+x] ==‘1’ 时 s[i] = ‘1’;否则 s[i] = ‘0’;给出 s 串,求 w 串。若存在则输出 w ,否则输出 -1;思路: 对于s[i]=‘0’,则若 w[i-x] 存在则 w[i-x] 必为‘0’,若 w[i+x] 存在则 w[i+x] 必为‘0’。所以此时 w 串满足了
2020-09-04 11:22:23 247
原创 Codeforces Round #666 (Div. 2) (A-D)
题目链接A - Juggling Letters直接统计每个字母个数,检查是否都是 n 的倍数即可#include<bits/stdc++.h>using namespace std;int vis[100];int main(){ int T; cin>>T; while(T--){ int n; cin>>n; memset(vis,0,sizeof vis); string s; for(int i=0;i<n;i++){
2020-09-02 19:10:32 147
原创 Codeforces Round #665 (Div. 2) (A-D)
题目A - Distance and Axis选一点 B ,使得∣OA−AB∣|OA-AB|∣OA−AB∣为 K 时 A 需要挪动多少单位。那么当OA <= k 时,使AB=0,需要挪动k-OA。当OA>k 时 B 点必须在OA内,此时 OA 分解为a、b之和,那么当OA为奇数时k=∣a−b∣k=|a-b|k=∣a−b∣ 为奇数,当OA为偶数时k=∣a−b∣k=|a-b|k=∣a−b∣ 为偶数。所以根据 k 的奇偶性改变OA的奇偶性即可。#include<iostream>u
2020-08-22 15:05:27 150
原创 D - Segment Intersections (Round 92 div2 模拟 枚举)
D - Segment Intersections * 题意: 分别给出 n 个区间 [al1,ar1],[al2,ar2],…,[aln,arn][al_1, ar_1], [al_2, ar_2], \dots, [al_n, ar_n][al1,ar1],[al2,ar2],…,[aln,arn] 其初始值均为 [l1,r1][l_1,r_1][l1,r1] 和 [bl1,br1],[bl2,br2],…,[bln,brn][bl_1, br_1], [bl_2, br_2],
2020-08-20 19:45:58 157
原创 B - Array Walk (Round 92 div2 贪心 枚举)
B - Array Walk 题意: 给定一个长度为 n 的数组,从位置1开始可以向右累加 k 次,且可以向左累加 z 次,但不能连续两次及以上向左累加,求最大累加和。思路: 贪心的考虑,在往右累加的过程中,若需要循环节的存在,则一定只要最大的一个循环节,所以我们在枚举最终停止位置时,同时记录最大的循环节,然后计算停止在每个位置能得到的最大累加和,再取最大即可。Code1:#include<bits/stdc++.h>using namespace std;#define IO
2020-08-20 18:36:43 207
原创 C - Good String (Round 92 div2 枚举)
C - Good String 题意: 给定一个只包含0-9的字符串,要求删去最少的字符使得剩下的子序列是good,当且仅当 t2t3…tn−1tnt1t_2 t_3 \dots t_{n - 1} t_n t_1t2t3…tn−1tnt1 和 tnt1t2t3…tn−1t_n t_1 t_2 t_3 \dots t_{n - 1}tnt1t2t3…tn−1 相同。思路: 可以证明要么两位不同的数循环出现,或者数字都一样两种情况才满足good的条件,所以直接枚举两位数字循环,选取最长
2020-08-20 17:46:25 230
原创 D. Colored Rectangles (Round 93 div2 DP)
D. Colored Rectangles 题意: 给三种颜色并且成对出现木条,长度分别为 ai、bi、cia_i、b_i、c_iai、bi、ci,问所有组成的矩形的面积的和最大为多少。(每个矩形必须有两种颜色,每种颜色木条数不超过 200)思路: 首先只贪心的选是不对的,因为我们要的是所有矩形的面积和最大,所以每次选择不能只选择最长的两对边,还要看每种颜色木条的数量。所以我们只能暴力DP出所有情况找出最大值。O(n3)dp[i][j][k]dp[i][j][k]dp[i][j][k] ,代表分
2020-08-17 22:45:13 144
原创 C - Good Subarrays (Round 93 div 2 思维)
C - Good Subarrays 题意: 给个长度为 n 的数组,选取一个区间,使得其区间和等于区间的长度,问有多少这种区间。思路: 暴力直接O(n2) 的去找肯定超时,所以我们做个转化,将所有元素减一,那么所有区间和等于0的区间都是满足条件的区间。所以我们可以在维护前缀和时,记录下每个前缀和出现的次数,当两个前缀和相等,那么其之间的区间和必为0。然后累加计数即可。Code:#include<bits/stdc++.h>using namespace std;typedef
2020-08-17 22:31:09 126
原创 牛牛的01游戏 (string)
牛牛的01游戏题目描述牛牛最近迷上了小游戏,于是他也想对他的01字符串进行一些操作,01字符串上的0和0相邻时会变成1,而1和1相邻时会在字符串上消失,而0和1相邻时什么都不会发生,牛牛现在把初始的字符串给你,你能告诉牛牛这个字符串最后会变成什么样吗。备注:1≤∣str∣≤1061\leq |str|\leq10^61≤∣str∣≤106,字符串上的合并消失应优先与左边进行,例如000,中间的0优先与左边的0合并变为10,消失同理思路: 直接用string充当栈,也可用stack 。Code:
2020-08-14 19:31:52 346
原创 D. Boboniu Chats with Du (664 div2 贪心 枚举)
D. Boboniu Chats with Du 题意: 给 n 个快乐值,你可以按任何顺序在群里说出快乐值为 kik_iki 的话,当 m<kim<k_im<ki 时,你会获得 d 天的禁言(不包括当天),n 天后你的快乐值的和最大是多少。思路: 很明显的贪心,但是不是太好想。首先我们把大于 m 的与小于等于 m 的数分开存到 a、ba、ba、b 数组中,然后分别从大到小排序。所以如果我们说快乐值大于 m 的话,那么每次肯定说最大的 ai,当说 num 次 ai 时要耗费t
2020-08-13 21:19:37 187
原创 C. Boboniu and Bit Operations (664 div2 位运算/dp)
C. Boboniu and Bit Operations 题意: 给出两个非负整数的数组a,b,长度分别为n,m。设对于 i,ji,ji,j 有 ci=aic_i =a_ici=ai&bjb_jbj ,求c1∣c2∣c3……∣cnc_1|c_2|c_3……|c_nc1∣c2∣c3……∣cn 的最小值。1≤n,m≤2001\le n,m\le 2001≤n,m≤200,0≤ai<290\le a_i < 2^90≤ai<29,0≤bi<290
2020-08-13 20:43:47 218
原创 C. Pinkie Pie Eats Patty-cakes (662 div2 构造)
C. Pinkie Pie Eats Patty-cakes题意: 有 n 个已知种类的蛋糕,求如何吃掉这 n 个蛋糕使得,相同种类的蛋糕之间的蛋糕距离最大,求最大吃法中的相同蛋糕的最小距离(两个相同蛋糕之间的距离为其之间的蛋糕数)。思路: 所以,如何构造才能使得相同蛋糕之间的距离最大呢,我们把种类最多的蛋糕数设为 k 个 ,显然分开放后会产生k-1个间隔,所以我们把剩下的蛋糕分别填充这k-1个间隙,然后找个最小的距离即可。注意 :k 可能会出现多个。Code1:隔板思想。#include&l
2020-08-12 22:12:22 178
原创 B. Applejack and Storages (662 div2 思维 模拟)
B. Applejack and Storages**题意: 初始给定n个长度已知的木板,然后q次操作,每次加入或减少一个长度为x的木板(保证减少前存在长度为 x 的木板),每次操作后询问:是否可以利用现在的木板组成一个正方形和一个长方形(可为正方形)。思路: 显然可以很暴力去做,每次操作后寻找出现次数前三大的数,然后分类讨论是否能组成,但是复杂度太大。由于四条形同的木板组成一个正方形,两条形同的木板组成一对边,所以,我们只统计 2≤k≤42\le k \le42≤k≤4 和 k=4k=4k=4
2020-08-12 21:36:47 160
原创 D. 505 (663 div2 枚举)
D. 505 题意: 给一个 n 行 m 列的01矩阵,其中 n≤mn \le mn≤m ,每次操作可以把某个元素取反,求最小的操作次数使得,这个矩阵中的每一个偶数大小的子方阵里的 1 都为奇数个。若不管多少操作都满足不了条件,就输出-1。思路: 服了,题都读不懂了QAQ。。所以,当 4≤n4\le n4≤n 时,问题是无解的,因为当存在 4 * 4 的方阵时,若其四个角的2 * 2 的方阵里的 1 为奇数个,那么4 * 4 里的就为偶数了。所以,分类讨论n=1,n=2,n=3,暴力枚举第一列后,
2020-08-11 17:40:02 296
原创 C. Cyclic Permutations(663 div 2 排列组合)
C. Cyclic Permutations 题意: 给一个 n 的全排列,然后构建一个图,节点为每个数的下标,数组中的每个数可以与右边第一个大于它的数,左边第一个大于它的数连接无向边,问在 n 的全排列中有多少排列构成的图中存在简单环。思路: 一开始题意还读错了,,以为是包含 n 的简单环有多少。。现在想想有点扯。所以当一个数左右两边存在大于这个数的数,必定能构成一个简单环,例如:对于i,j,k,当i>j,k>j对于i,j,k,当i>j,k>j对于i,j,k,当i>j
2020-08-11 17:13:38 295
原创 E1. Weights Division (easy version) (div3)(贪心)
E1. Weights Division (easy version) 题意: 给一颗以1为根的树,每次操作可以把一条边的边权除以2下取整,问要使根节点到所有叶子节点的路径长度和小于给定的S,求最小的操作次数。 思路: 由于从根到叶子的路径中有很多的边是重复经过了多次的,所以在贪心的时候要从整体考虑贪心,并且我们每次找的是,把这条边整除2后与之前的边的差值尽量大的边,这个差值除了w - w / 2 之外我们还要乘上这条边经过的次数,才能每次找到最优的边。Code:#include<bits/
2020-08-10 16:30:17 236
原创 D. Binary String To Subsequences (div3) (字符串思维)
D. Binary String To Subsequences题意: 给一个01串,要求拆分成尽量少的子序列,每个子序列满足01交替,例如:101010或者010101,输出子序列个数 及原串中每个字符所属的子序列编号。思路: 由于字符串长度2e5,所以考虑 O(n) 或者 O(nlogn) 的做法。我们考虑如何使得子序列最少:在遍历时当前位为1时,那么如果之前有以0结尾的子序列,那直接接上去,并且此子序列的末尾状态也改变了,否则重新另开一个子序列。那么就可以用两个队列,动态的维护是否有以 0
2020-08-10 16:01:30 346
原创 2020 Multi-University Training Contest 6
1002 Little Rabbit’s Equation有两个注意点:题目中说有前导0得注意,其次就是最小的进制为2,注意判别;#include<bits/stdc++.h>using namespace std;typedef unsigned long long LL;const int mod = 998244353;const int N = 6e6+7;LL fun(string s,LL ans){ LL x=0,i=0; while(s[i]=='0'&
2020-08-09 21:16:35 129
原创 2020 Multi-University Training Contest 5
1001 Tetrahedron 首先,a,b,c都是随机出自同一个区间,所以a,b,c的期望都相同,所以底面三角形为等边三角形,所以 h 的另一端为三角形的重心,然后就可以求出 1h2=3c2\frac{1}{h^2} =\frac{3}{c^2}h21=c23,所以求出 1c2\frac{1}{c^2}c21 的期望即可,注意此时求期望的数组是[1,14,19…1n2][1,\frac{1}{4},\frac{1}{9}…\frac{1}{n^2}][1,41,91…n21],然后按定义
2020-08-09 18:11:04 115
原创 换个角度思考(离线化+树状数组)
换个角度思考题目描述给定一个序列,有多次询问,每次查询区间里小于等于某个数的元素的个数即对于询问 (l,r,x),你需要输出 ∑i=lr[ai≤x]\sum_{i=l}^{r}[a_i \le x]∑i=lr[ai≤x] 的值其中 [exp] 是一个函数,它返回 1 当且仅当 exp 成立,其中 exp 表示某个表达式输入描述:第一行两个整数n,m第二行n个整数表示序列a的元素,序列下标从1开始标号,保证1 ≤ a_i ≤ 105之后有m行,每行三个整数(l,r,k),保证1 ≤ l ≤
2020-08-06 23:58:50 736
原创 牛牛的字符反转(模拟)
S1第9场牛牛的字符反转题目描述:牛牛酷爱循环右移操作,但是牛牛的电脑寄存器坏掉了,无法实现正常的循环右移操作,只能实现区间反转操作,现在牛牛有一个长度为n的字符串,他想进行循环右移k位的操作,你能告诉牛牛,他最少对这个字符串进行几次区间反转操作能实现循环右移k位呢。反转操作指字符串某一区间[L,R]\left[ L,R \right][L,R]内的字符反转,例如“123456”,区间[3,5]进行反转字符串变为“125436”。假设字符串每一位都不同。给定一个字符串长度n和循环右移次数k,求最少反转
2020-08-06 23:25:33 296
原创 P1972 HH的项链(离线化+树状数组)
P1972 [SDOI2009]HH的项链题目描述HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答…… 因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。输入格式一行一个正整数 n,表示项链长度。第二行 n 个正整数 a_i ,表示项链中第 i 个贝壳的种类。
2020-08-06 19:32:13 205
原创 AtCoder Beginner Contest 174 (全)
AtCoder Beginner Contest 174A - Air Conditioner#include<bits/stdc++.h>using namespace std;int main(){ int t; cin>>t; if(t>=30) cout<<"Yes\n"; else cout<<"No\n"; return 0;}B - Distance#include<bits/stdc++.h>u
2020-08-06 18:23:09 278
原创 小阳的贝壳(差分+线段树)
小阳的贝壳题目描述 :小阳手中一共有 n 个贝壳,每个贝壳都有颜色,且初始第 i 个贝壳的颜色为 col_i 现在小阳有 3 种操作:1 l r x:给 [l,r] 区间里所有贝壳的颜色值加上 x 。2 l r:询问 [l,r] 区间里所有相邻贝壳 颜色值的差(取绝对值) 的最大值(若 l = r 输出 0)。3 l r :询问 [l,r]区间里所有贝壳颜色值的最大公约数。输入描述:第一行输入两个正整数 n,m,分别表示贝壳个数和操作个数。第二行输入 n 个数 col_i 表示每个贝壳
2020-08-05 20:55:20 176
原创 小K的疑惑 (树上思维)
小K的疑惑题目描述:众所周知,小K是一只连NOIP2018初赛都没有过的蒟蒻,所以小K很擅长dfs序+分块树,但是本题与dfs序+分块树无关。小K现在心态爆炸了,因为小K被一道简单的数据结构题给卡住了,希望请你来解决它,但是小K又不想太麻烦你,于是将题面进行了简化(其实是出题人懒得写题面了233333):Bob有????个点的树,每条边的长度有一个边权,现在定义????????????(????,????)代表第????个点到第????个点的距离模2之后的结果。问有多少(????,????,????
2020-08-05 13:55:18 230
原创 「火」皇家烈焰 (线性DP)
「火」皇家烈焰题目描述 :帕秋莉掌握了一种火属性魔法由于钟爱扫雷游戏,帕秋莉把自己图书馆前的走廊看作一个一维的扫雷地图,她制造了很多烈焰,排在这条走廊内现在帕秋莉告诉你一部分烈焰的分布情况,请你告诉她可能的情况有多少种对于一个格子,里面会有以下几种字符:0:这个格子没有烈焰,且其左右两个格子均没有烈焰1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰2:这个格子没有烈焰,且其左右两个格子中均有烈焰*:这个格子有烈焰?:未告诉你本格情况输入描述:一个字符串 ,对于100%的数据,n≤
2020-08-04 23:57:55 702
原创 救救企鹅(字符串hash)
救救企鹅题目描述:另一天,一只可爱的围着围巾的肥企鹅在路上摇摇晃晃地走着,遇上了迎面走来的打着饱嗝的PM6。小企鹅预感不妙,这不就是最近有名的恶人PM6么!吓得立刻扭头就想跑。PM6:“小火汁,站住!我不吃你(谁叫你是保护动物)。我这有一道简单题,如果你答对了,我就给你吃鱼肉,如果你答错了,就免费帮我充游戏币!”企鹅:“(:3J∠)(默默摘掉围巾)”PM6:“我给你一个文本串 S ,再给你两个串A、B,你要将文本串中的 A 都转换成 B ,转换后的字符不再参与转换,输出最终的文本串。”求求你救救
2020-08-04 22:51:44 198
原创 [SCOI2009]粉刷匠 DP)
[SCOI2009]粉刷匠题目描述:windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。如果windy只能粉刷 T 次,他最多能正确粉刷多少格子?一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。输入描述:第一行包含三个整数,N M T。接下来有N行,每行一个长度为M的字符串,'0’表示红色,'1’表示蓝色。30%的数据,满足 1 <=
2020-08-03 19:15:40 291
原创 2020 Multi-University Training Contest 4
1011 Kindergarten Physics这场的签到还是很签到的,由于所给的重量和时间都小于等于100,所以减少的距离精度一定小于1e-6,所以直接在原距离上减个更小的精度即可;#include<iostream>using namespace std;int main(){ int T; cin>>T; while(T--){ double a,b,d,t; cin>>a>>b>
2020-08-02 19:26:37 163
原创 2020 Multi-University Training Contest 3
1004 Tokitsukaze and Multiple(贪心)题目大意: 给定n个数,相邻的数之间能合并相加,问最多能有几个分段和能被p整除。思路: 显然我们贪心的从前往后遍历,一旦这段和能被p整除就把这段合并,然后往后再找,这样最终获得的p的倍数的数一定是最多的。 如何确定这段和是p的倍数:维护前缀和%p,当出现了两个相同的余数时,那么这两个位置之间(左开右闭)的元素和一定是p的倍数。(老套路了Code1: 对于每个子段区间,利用map记录上一个出现相同余数的位置。当此段结束时清空map#in
2020-08-01 23:53:56 163
原创 今年暑假不AC(区间贪心)
今年暑假不AC贪心:“按右端点排序,能选就选,不能就不选。因为如果不能选的话,它的加入一定会导致至少一条线段的退出,并且还使得当前线段集的最右端点右移了,一定不优。”并且不能用左端点贪心。#include<iostream>#include<algorithm>#include<cstring>#include<vector>using namespace std;typedef pair<int,int> PII;const
2020-08-01 10:05:01 157
原创 D. Prefix-Suffix Palindrome (Manacher)
D1. Prefix-Suffix Palindrome (Easy version)题意: 给一个字符串 s,求一个字符串 t,t 由 s 的某个前缀以及某个后缀拼接而成,且 t 是回文串,长度不能超过 s。输出最长的 t思路: 可以证明 :当 s=“abcxxcbawuvcba”s=“abcxxcbawuvcba”s=“abcxxcbawuvcba”,最终答案一定包含首部的 abcabcabc 以及尾部的 cbacbacba 两部分。因为此时的最大回文串有两种选法:1、全选前缀abcxxcbaabc
2020-07-31 20:41:05 250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人