自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 SpringBoot 项目集成 Shiro + JWT 实现用户认证与权限控制

在 SpringBoot 项目中使用 Shiro 安全框架和 JWT 来进行用户验证与权限控制

2022-07-13 15:12:48 6803 1

原创 超级详细的线段树入门教程【附模板】

来看一个简单的例子现在给出一个包含n个整数的数组,对该数组进行m次操作每次操作给出一个值 op若 op == 1 则将第 p 的元素改成 k若 op == 2 则求出区间[l, r]内的最大值并输出现在来分析这个问题很显然暴力的做法复杂度高达O(nm),那么现在考虑来优化这个问题假设给出的数组是 {1, 5, 2, 3, 4, 8}我们很容易发现max{1, 5, 2, 3, 4, 8} = max(max{1, 5, 2}, max{3, 4, 8}}; max{1, 5, 2} =

2021-11-10 21:15:14 1339

原创 2021杭电多校第一场 hdu6955 Xor sum【trie树】

题意:给出一个整数序列(序列元素值 >= 0)和一个整数k(k>=0),求满足序列子段元素 异或和>=k 的最短子段(若有多个长度相同的最段子段输出最靠左的一个)思路利用 sum[i]^sum[j]==sum[i~j] 的性质,在该序列中从左往右查找,每次将当前位置的前缀和插入trie树,然后在trie树中找到与当前前缀和异或和>=k的最靠右的数,再更新答案具体查找 L 的过程如下代码:#include <bits/stdc++.h>using na

2021-08-13 18:50:40 207

原创 2021年牛客寒假集训营第六场题解

A、回文括号序列计数思路:只有 (…) 形式的才符合题意,但(…)不是回文串所以只有0的时候才行,其他都不行代码:#include <bits/stdc++.h>using namespace std;int main() { int t; cin >> t; while (t--) { int n; scanf("%lld", &n); if (n == 0) put

2021-02-28 14:14:32 199

原创 2021年牛客寒假集训营第五场题解

B、比武招亲(上)思路:代码:C、石子游戏思路:代码:F、我的心是冰冰的思路:由树的结构特点易知当树的节点有多个时,只需要两种颜色即可,然后特判一下一个节点的情况代码:#include <bits/stdc++.h>using namespace std;int main() { int t; cin >> t; while (t--) { int n; scanf("%d", &n);

2021-02-28 14:13:36 148

原创 2021年牛客寒假集训营第四场题解

A、九峰与签到题B、武辰延的字符串思路:代码:#include <bits/stdc++.h>using namespace std;typedef unsigned long long ULL;const int N = 1e5 + 5, B = 131;char s[N], t[N];ULL h1[N], h2[N], p[N];ULL get1(int l, int r) { return h1[r] - h1[l-1] * p[r-l+1];}ULL

2021-02-25 10:12:41 165

原创 2021年牛客寒假集训营第三场题解

A、模数的世界B、内卷C、重力坠击D、Happy New Year!思路:签到题代码:#include <bits/stdc++.h>using namespace std;int main() { int n; scanf("%d", &n); if (n == 2030) printf("2102\n"); else printf("%d\n", n + 9); return 0;}E 、买礼物

2021-02-17 22:39:02 177

原创 2021年牛客寒假集训营第二场题解

A、牛牛与牛妹的RMQB、牛牛抓牛妹C、牛牛与字符串borderD、牛牛与整除分块E、牛牛与跷跷板F、牛牛与交换排序G、 牛牛与比赛颁奖H、牛牛与棋盘I、牛牛的“质因数”J、牛牛想要成为hacker

2021-02-10 22:23:09 187

原创 2021年牛客寒假集训营第一场题解

A思路:一共n个字符,可以转化为 i (1<=i<=n) 个字母中包含"us"的方案数之和用 f[i][2/1/0] 表示前 i 个字母中 含有us/含u但不含us/既不含u也不含us 的方案数然后可得状态转移方程:f[i][0] = 25 * f[i - 1][0] //前i-1个字符不含u也不含s,那么第 i 个字符除了u可以在另外25个字母中随便填f[i][1] = f[i - 1][0] + 25f[i - 1][1] //前i-1个字符既不含u也不含us的话,那

2021-02-06 21:13:40 257 1

原创 2021/02/01补题(1300+1500)

Pokémon Army (easy version) (CodeForces - 1420C1)题意给一个数组,按顺序从中选出一些数字,在这些数字中交替穿插 ‘+’ 和 ‘-’ ,求最终能得到的最大值思路一个状态机模型,列出状态转移方程即可代码#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 3e5 + 5;LL a[N], f[N][2];void so

2021-02-01 21:48:25 210

原创 2021/01/31补题(1200+1700)

Rock and Lever (CodeForces - 1420B)题意给出一个数组,求数组中有多少对整数满足:ai & aj ≥ ai ⊕ aj(i < j)思路将数组中的元素从小到大进行排序,由&运算与⊕的特点可知,只有当两个最高位相同是才有可能满足题目所描述的情况,排好序后直接计算每一段的组合数即可代码#include <bits/stdc++.h>using namespace std;typedef long long LL;const

2021-01-31 21:39:42 220

原创 2021/01/29补题 (1500+1500)

k-Amazing Numbers (CodeForces - 1416A )题意给出一个数组,依次求该数组中所有长度为k(1<=k<=n)的子段,若这些子段中存在相同的数,则输出这些相同的数中的最小值,否则输出-1思路首先将数组中所有相同的数提出来,然后对于每一种相同的数 i,计算它们之间的间隔,取最大间隔mx,表示 i 是所有长度为mx的所有子段的一个共有数,用一个ans数组存储所有长度为k的子段的共有值的最小值然后对于任意一个长为x的子段的共有最小值,都可以由比长为y(y<

2021-01-29 20:29:48 217

原创 2021/01/27补题(1300+1700)

Negative Prefixes (CodeForces - 1418B )题意给定一组数,其中有些数被锁定,对没有被锁定的数进行任意排列,被锁定的数保持在数组中原来的位置,然后求出重排后数组的所有前缀和,当某一前缀s[i]>0时,规定k=i-1,问该k值最小可以为多少思路若想前缀和大于0的s[i]尽早出现,就需要前面的数尽可能的大,所以除去锁定的部分,只需要将未锁定的部分进行从大到小排序即可代码#include <bits/stdc++.h>using namespac

2021-01-27 21:38:02 76

原创 2021/01/26补题(1600+1300)

Lonely Numbers (CodeForces - 1423K )题意首先给出一个定义:若两个数a,b满足以gcd(a,b),a/gcd(a,b),b/gcd(a,b)的值为边长的三条边能够组成一个三角形,则称a,b为友好数。先给出一个正整数n,问从1~n中有多少个数无法与给出的其他数字组成友好数思路借鉴dalao的思路: 点击跳转一、如果一个数为质数,那么这个质数的友好数只有可能是它的平方证明:设一个质数x的友好数为y①当(y%x!=0)时,三条边长度分别为1,x,y,最短边为1,只有

2021-01-26 21:52:25 197

原创 2021/01/25补题(1400+1300+1300)

Arena of Greed (CodeForces - 1425A)题意给出n个石子,两个人进行博弈,每个人每次可以选择拿走一个石子或拿走当前石子数目一半的石子(前提是当前石子个数为偶数),两人轮流进行,当没有石子可拿时游戏结束,问每个人都采取最优解的情况下先手最多可以拿走多少颗石子思路刚开始的时候以为只要每次偶数就拿一半,奇数就拿一个就是最优解,然后成功的wa掉了一个更优的策略是:当前石子个数为4的倍数时,我们只拿一个,这样可以保证下一次对手也只能拿到一个,然后当石子个数为2的倍数且不为4的倍

2021-01-25 21:53:52 493 1

原创 2021/01/24补题(1700+1400)

String Deletion (CodeForces - 1430D )题意给定一个只包含0和1的字符串,每次可选择其中任意一位并删掉,删掉后剩下的字符串会自动删除第一段连续相同的前缀,求最多可以操作多少次使字符串变为空串思路首先将连续相同的子串分段,因为每次删除一个字符后会自动删除第一段子串,所以要求最多的操作次数就需要每次删除字符时尽量不减少子串的段数,那么可以每次删除字符时优先选择从字符数>=2的子串删除,如果没有就任意删除,不影响最优结果。选择删除的过程用双指针实现代码#incl

2021-01-24 20:39:27 517

原创 2021/01/23补题(1400+1700)

Chess Cheater (CodeForces - 1427B)题意给定一个字符串序列,其中字符 ‘L’ 不加分,单独的字符 ‘W’ 加1分,对于连续的 W…W 子串,第一个 ‘W’ 加1分,后面的 ‘W’ 均加2分,每次操作可以将L变为W,求在最多操作k次的情况下最多可以得到多少分思路求出所有被W包围的L串(如 WL…LW),然后在k次操作的限制下尽可能的替换这些L串(按照长度从小到大的顺序替换),每替换掉一个被包围的L串,分数加上2x+1(x为该L串长度),当k值不足以替换某个L串时,分数加

2021-01-24 20:16:08 212

原创 2021/01/22补题(1200+1700)

Belted Rooms (CodeForces - 1428B)题意:给定n条边连接n个点形成一个环,有单向边和双向边,求有多少个点是可达的(即从该点出发回最终能回到该点)思路:考虑如果所有边都是方向相同的单向边(或用双向边代替)那么n个点都是可达的,否则如果出现两条方向不同的单向边则只需考虑双向边的条数,所有连接了双向边的点就是可达的点,统计即可代码:#include <iostream>#include <cstring>using namespace std;

2021-01-22 17:50:12 222

原创 牛客IOI周赛20-普及组题解

牛客IOI周赛20-普及组题解菜鸡第一次ak牛客系列赛,虽然说这场比赛蛮水,但挺有纪念价值,因此写篇题解纪念一下(A.完全数60分做法:暴力把 (1 ~ n-1) 跑一遍,把所有能被n除尽的数(因子)加起来100分做法:实际上每次找出一个因子时,就可以通过 n/i 求出另一个因子,这样的话便只需要遍历(1 ~ sqtr(n)-1)就可以了#include <iostream>using namespace std;typedef long long LL;int main(

2020-11-29 23:32:30 199

原创 飞机大战C语言实现

这是大一下学期结束的大作业,因为不想去写千篇一律的学生管理系统之类的东西,所以就想着做一个游戏,正好在书上看到一个C语言实现飞机大战的教程,就想着在此基础上加以改进,写一个豪华版 乱搞版的飞机大战 。由于时间与技术的限制,只增添了以下4个功能:一、玩家飞机的血量与能量机制的实现二、激光武器的实现三、画面中同时出现多架敌机四、轰炸机boss的实现下面分享一下具体功能的实现思路:①玩家飞机的血量与能量机制定义两个全局变量hp=10(血量值),mp=100(能量值),当玩家飞机与敌机或轰炸机的炸弹

2020-06-30 11:57:31 7954 11

原创 一个简易的学生信息管理系统

educoder上的一个实训项目,本来思路并不难,奈何实现其对输出的数据检测要求十分严格(我在输出某行数据时其间隔少了一个空格导致花费了数小时debug),以致做该题时体验并不好!#include<stdio.h>int count;struct node{ int num,score; char name[233];}stu[233];void load(){ int i; FILE *file=fopen("step1/data.txt","r"); for(i=0

2020-06-10 19:20:39 1774

Quicksum(C语言)

A checksum is an algorithm that scans a packet of data and returns a single number. The idea is that if the packet is changed, the checksum will also change, so checksums are often used for detecting transmission errors, validating document contents, and in many other situations where it is necessary to detect undesirable changes in data. For this problem, you will implement a checksum algorithm called Quicksum. A Quicksum packet allows only uppercase letters and spaces. It always begins and ends with an uppercase letter. Otherwise, spaces and letters can occur in any combination, including consecutive spaces. A Quicksum is the sum of the products of each character's position in the packet times the character's value. A space has a value of zero, while letters have a value equal to their position in the alphabet. So, A=1, B=2, etc., through Z=26. Here are example Quicksum calculations for the packets "ACM" and "MID CENTRAL": ACM: 1*1 + 2*3 + 3*13 = 46 MID CENTRAL: 1*13 + 2*9 + 3*4 + 4*0 + 5*3 + 6*5 + 7*14 + 8*20 + 9*18 + 10*1 + 11*12 = 650 Input The input consists of one or more packets followed by a line containing only # that signals the end of the input. Each packet is on a line by itself, does not begin or end with a space, and contains from 1 to 255 characters. Output For each packet, output its Quicksum on a separate line in the output. Sample Input ACM MID CENTRAL REGIONAL PROGRAMMING CONTEST ACN A C M ABC BBC # Sample Output 46 650 4690 49 75 14 15

2019-12-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除