自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大聪明的博客

我承认我有赌的成分,但是我赌对了。

  • 博客(122)
  • 收藏
  • 关注

原创 负数取余问题

定义2取余的结果就会导致出现两个余数了,比如5%(-3) = (-3)x(-1)+2 = (-3)x(-2)-1,所以这里的余数2和-1都满足定义。1)定义1:如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数 q 和 r,满足a=qd+r且0 ≤ r < d(其中q为商,r为余数)。,即5%(-3) 的结果为2而不是-1,(-5)%3的结果是-2而不是1。5%(-3)=(-3)x(-1)+2,商为-1,余数为2。(-5)%(-3)=(-3)x2+1,商为2,余数为1。

2023-11-10 20:18:58 1123

原创 i=i+1和i+=1以及i++和++i详解

原因就在于,当使用复合赋值运算符进行操作时,即使右边算出的结果是int类型,系统也会将其值转化为左边的byte类型,而使用简单赋值运算时没有这样的优待,系统会认为将i+1的值赋给i是将int类型赋给byte,所以要求强制转换。比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中**++i比i++效率要高些**。左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。i++是先传递结果后加,而++i刚好相反,是先加后传递结果。

2023-09-11 19:34:20 2816

原创 阶乘约数(唯一分解定理)

题目描述定义阶乘 n! = 1 × 2 × 3 × · · · × n。请问 100!(100 的阶乘)有多少个正约数。分析:正约数也就是正因数,把阶乘分开求,用到了乘法分配律;需要结合本博客相关知识

2022-06-15 12:25:48 627 2

原创 扩散(多源广搜)

bigsmart

2022-06-14 18:56:15 228

原创 地宫取宝(记忆化深搜)

大聪明

2022-06-07 10:57:37 166

原创 HDU - 1501 Zipper(记忆化深搜)

大聪明

2022-06-05 10:29:53 124

原创 生活大爆炸(数学)

分析:首先保证至少有4男1女,然后每次都要出t个人,所以那t-5人就要从剩下的人中挑选,挑选的过程中用到了乘法原理和阶乘,但要记住控制变量;#include<bits/stdc++.h>typedef long long ll;using namespace std;ll a[10000];ll cul(ll x,ll y){ if(y>x/2) y=x-y;//可以使cnt小一点,防止超范围 ll cnt1=1,cnt2=1; for(int i=x;i>=.

2022-05-20 20:07:45 97

原创 C. Boats Competition(双指针)

传送门题意:给你含n个数字的数组,可以任意两两相加,问你最多有多少对数字的和可以是同一个数字(一个数字不可以重复使用)分析:范围小,可以使用暴力;如果满足条件,每个数字只可以使用一次,所以可以遍历相加的和,然后排序后,头和尾作为双指针相加,不满足条件就朝着接近满足的方向转移ac代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;int inf=0x3f3f3f3f;int a[110];int

2022-05-06 19:21:48 468 2

原创 L3-2 拼题A打卡奖励(背包优化)

使用01背包模板复杂度为n*m约为6e9。因为时间,也就是背包的重量<=600,所以最多为6e5,所以将价值和重量反过来ac代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=600000;int v[N],w[N],dp[N];int n,m,sum; int inf=0x3f3f3f3f;int main(){ scanf("%d%d",&n,&am.

2022-04-19 19:13:05 493 1

原创 检查密码(记录)

链接本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。输入格式:输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。注意: 题目保证不存在只有小数点的输入。输出格式:对每个用户的密码,在一行中输出系统反馈信息,分以下5种:如果密码合法,输出Your password is wan mei.

2022-04-17 09:21:15 284

原创 判断素数( 用sqrt() )

链接开方比乘方快,用后者 超时#include<bits/stdc++.h>using namespace std;typedef long long ll;ll cul(ll x){ //for(int i=2;i*i<=x;i++)//会超时 for(int i=2;i<=sqrt(x);i++) { if(x%i==0) return 0; } return 1;}int main(){ ll t,n; scanf("%lld",&a

2022-04-17 08:34:12 755

原创 回顾历史(二位字符串记录)

链接分析:首先想到的就是map开string记录,才发现也记录不了带空格的,rnm!然后就着急┭┮﹏┭┮,我是fw,其实开二位字符串暴力即可#include<stdio.h>#include<string.h>char s[100];int n;char a[12][100]= {"Little Gyro and Sort", "Little Gyro and Sets", "Little Gyro

2022-04-16 20:13:13 350

原创 7-12 CPA招新Ⅱ(结构体 比较字符串出现次数)

链接7-12 CPA招新Ⅱ (25 分)新学期开始啦,我们CPA是2019年6月成立的,创建时有20位元老。现在需要招新啦,每年新学期社团服务中心会组织百团大战。我们CPA迎来第一次招新,我们很期待迎来新成员。每天都有元老去招新,每招到一个萌新,招新人会在纸上写一个大写字母。CPA共有竞赛部、宣传部、办公部、组织部四个部门。我们规定A代表竞赛部(Competition department),B代表宣传部(Propaganda Department)、C代表办公部(Office)、D组织部(Organ

2022-04-16 20:01:52 133

原创 L2-1 红色警报(最短路)

链接战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息

2022-04-15 20:04:48 88

原创 L1-7 谷歌的招聘

链接2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.71828182845904523536028747135266249775724709369995957496696762772

2022-04-14 15:22:51 1659 1

原创 蓝桥杯2017初赛部分题解

结果填空:青蛙爬井#include<bits/stdc++.h>using namespace std;typedef long long ll;int main(){ int h=60405; int u=105; int d=35; int ans=0; while(h) { ans++; h-=u; if(h<=0)//最后一天白天爬完 { cout<<ans<<endl; break; } h+=d;

2022-04-08 11:48:25 205

原创 计蒜客 - 43116 结果填空:爬楼梯(dfs dp)

传送门蒜头君要爬楼梯。楼梯一共有 1010 层台阶。因为腿长的限制,每次最多能上 44 层台阶。但是第 5,75,7 层楼梯坏掉了不能踩。求上楼梯的方案数。分析:这题是从0层开始走的!!!!dfs:完全模拟,恰好到第10层就ans++;而且for循环保证不会走重复#include<stdio.h>#include<iostream>using namespace std;#define ll long longint vis[20];int ans;void df

2022-04-04 15:02:55 575

原创 2022年“蓝桥杯”上海理工大学校选赛 Graph【结构体 贪心】

链接分析:初始的线段都是从小到大且连串的,如果两个点有交集只需要一刀断多个区间,需要两刀的情况这种情况,一刀断就可以;取决于你的区间,如果都交集于1个区间,那么就可以一刀断,所以每次遍历一个区间的时候,看左半部分是否在未切区间的交集里即可还有一个坑就是 给你区间范围的时候不都是左边小右边大的!!!!!AC代码:#include <bits/stdc++.h>using namespace std;struct node{ int x,y;}e[100010];in

2022-04-04 09:49:27 280

原创 蓝桥杯 明码(二进制函数转换)

LINK本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。汉字的字形存在于字库中,即便在今天,1616 点阵的字库也仍然使用广泛。1616 点阵的字库把每个汉字看成是 16 \times 1616×16 个像素信息。并把这些信息记录在字节中。一个字节可以存储 88 位信息,用 3232 个字节就可以存一个汉字的字形了。 把每个字节转为 22 进制表示,11 表示墨迹,00 表示底色。每行 22 个字节,一共 1616 行,布局是:第 1 字节,第 2 字节第 3 字节,第

2022-04-02 11:05:52 128 2

原创 洛谷 - P1387 最大正方形(dp 二维前缀和)

在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长。Input输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m个数字,用空格隔开,0或1.Output一个整数,最大正方形的边长Sample 1Inputcopy Outputcopy4 40 1 1 11 1 1 00 1 1 01 1 0 12分析:dp:开两个for循环遍历,记录当前可以组成正方形的最大边长,每次比较遍历位置的 正左 正上 左上位置中最小的再加1,如

2022-04-02 08:45:12 175

原创 51Nod - 1384 全排列

链接给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列。例如:S = “131”,输出为:113131311Input输入一个字符串S(S的长度 <= 9,且只包括0 - 9的阿拉伯数字)Output输出S所包含的字符组成的所有排列SampleInputcopy 1312Outputcopy1312112311321213123113121321211321312311311231213211分析:全排列函数或

2022-04-01 11:40:49 345

原创 史东薇尔城(spfa最短路优化 堆)

问题:给出当前点和任务点,求当前点到点1的距离加上点1到任务点的距离。所以直接spfa一遍再分开加就行。分析:数据过大,所以必须使用优化。利用堆和优先队列,已经book标记。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> pll;const int N=1e6+1000;int inf=0x3f3f3f3f;ll head[N],d.

2022-03-30 17:13:32 170

原创 次佛锅(map)

链接分析:记录子字符串出现的次数,首选map<string,int>,所以必须用c++语句AC代码:#include<bits/stdc++.h>using namespace std;int main(){ string s; int m,n; map<string,int>m1; while(1) { cin>>s; if(s[0]=='0') { return 0; } if(s[0]<'0'||

2022-03-28 19:52:43 245

原创 后缀表达式(数学)

传送门分析:如果没有负号,就把所有数直接相加!!!如过存在负号,可以在负号后边加一个大括号,如果是正数,就把正放在符号前面(都是相加的),如果是负数,就把负数放在里面,因为必须起码有一个数字放括号里面,所以就减最小的那个数;又因为符号前面必须得有数字,所以必须加最大的那个数,其他的加上绝对值即可。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;ll n,m,sum;ll a[1000000]

2022-03-26 09:23:52 896

原创 POJ - 3190 Stall Reservations(结构体优先队列)

链接这里有N只 (1 <= N <= 50,000) 挑剔的奶牛! 他们如此挑剔以致于必须在[A,B ]的时间内产奶(1 <= A <= B <= 1,000,000)当然, FJ必须为他们创造一个决定挤奶时间的系统.当然,没有牛想与其他奶牛分享这一时光帮助FJ做以下事:使每只牛都有专属时间的最小牛棚数每只牛在哪个牛棚也许有很多可行解。输出一种即可,采用SPJInput第一行一个数字 N第 2…N+1行: 第 i+1行 描述了i号奶牛挤奶的起止时间Output

2022-03-25 20:28:13 463

原创 L2-020 功夫传人( vector容器表示邻接表 )

分析:先输入建立一个邻接表,然后从祖宗点开始遍历!千万不从循环从小到大!遍历完祖宗接着遍历祖宗下的点,一连串下去,如果从小的点到大的点排序有的点自己还没有更新就去更新下边的点是错的!!!!:double和int型相乘会变0 一定要转换AC代码:#include<bits/stdc++.h>#include<vector>using namespace std;const int N=100100;vector<int> v[N];double ans,z.

2022-03-21 19:49:01 176

原创 Gym - 101981A Adrien and Austin(思维)

链接题意:给你n个石子,每次都可以移走几颗,最多一次移K颗,但是必须是连续的!!!adrien先移,最后到谁那没有石子可移动了谁就赢了。两个人都采用最优策略,问谁会赢分析:如果是奇数个,先手先中间移走奇数个变为偶数个,也就分为相等的两半,后手移哪个,先手跟着移就行,因为只能移连续的,所以可以一直保持对称,先手跟着走完最后一步如果偶数个,先手移走偶数个分为两段同上。如果是k=1,且是偶数个,先手必败。还有注意开局为0先手也必败AC代码:#include<bits/stdc++.h>

2022-03-20 21:33:08 323

原创 CodeForces - 1519D Maximum Sum of Products(dp 减枝优化)

链接题意:分别给出各含有n的元素的ab数组,sum为a[i]b[i],现在可以使一个连续的子区间反转相乘,问你最大sum为多少分析:先求出一般情况下sum,开两个for循环作为初末点,然后用深搜来反转,dp记录的是反转的变化值,所以最后求得的最大值还要加上sum*AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;int inf=0x3f3f3f3f;const int N=5050;ll

2022-03-17 21:14:08 283 1

原创 CodeForces - 1526C2 Potions (Hard Version)(优先队列 贪心)

LINK题意:给出n个药水,初始生命为0,问在生命值为非负数的情况下最多可以喝多少瓶药水分析:药水按顺序喝,如果为整数就加到当前生命值中,如果为负数就放入优先队列,当生命值为负的时候,加上优先队列中第一个的绝对值,数量-1 相当于反悔了,每次都反悔喝过之前的负数最大的AC代码:#include<bits/stdc++.h>#include<queue>using namespace std;typedef long long ll;int a[200010];int

2022-03-17 20:26:56 335

原创 POJ - 2349 Arctic Network(最少生成树)

传送门国防部(DND)要用无线网络连接北部几个哨所。两种不同的通信技术被用于建立网络:每一个哨所有一个无线电收发器,一些哨所将有一个卫星频道。任何两个有卫星信道的哨所可以通过卫星进行通信,而不管他们的位置。同时,当两个哨所之间的距离不超过D时可以通过无线电通讯,D取决于对收发器的功率。功率越大,D也越大,但成本更高。出于采购和维修的方便,所有哨所的收发器必须是相同的;那就是说,D值对每一个哨所相同。你的任务是确定收发器的D的最小值。每对哨所间至少要有一条通信线路(直接或间接)。Input输入的第一

2022-03-15 19:56:23 190 1

原创 包子凑数(数学)

链接啊啊啊~~~题目描述小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有3种蒸笼,分别能放4、5和6个包子。而顾

2022-03-14 20:38:04 222 1

原创 k倍区间(思维题)

传送门分析:区间序列之和是k的倍数,首先想到暴力 10的5次会超时;如果两个区间之间的差值是k的倍数,则中间的数满足k倍区间;所以用前缀和记录一下,再遍历用乘法原理。#include<bits/stdc++.h>using namespace std;long long sum,yushu[100010];int main(){ int n,k,x; long long count=0;; scanf("%d%d",&n,&k); f

2022-03-11 10:39:52 243

原创 野比大雄的作业(二进制)

链接题意:寻找一个区间,求结果最大的。and:二进制同时为1才为1,否则为0.or:二进制有一个为1就为1,否则为0;分析:结论:只有一个最大的数字它的and和or最大。因为:and必须第一个数是1的地方第二个必须是1,or必须第一个是0的情况第二个是1才能使ans变大,且第一个数应该越大越好,这样无法满足。所以只能使用最大的一个数,ans为max*2;#include<bits/stdc++.h>using namespace std;long long a[100100];i

2022-03-11 09:15:51 188

原创 分巧克力(思维 降低复杂度)

链接题意:给你几块大的巧克力的尺寸,和需要分享的人,求每人最多可以分得多大的巧克力(每人分得的大小必须一致)分析:一块巧克力能分为(a/c)*(b/c)小块,开始想的是c从1开始遍历,但是部分超时,解决方法见代码注释;#include<bits/stdc++.h>using namespace std;const int N=1e5+10;long long sum;int inf=0x3f3f3f3f;struct node{ int x,y;}e[N];int

2022-03-10 17:57:48 251

原创 方格分割(深搜)

传送门题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。如下就是三种可行的分割法。试计算: 包括这 33 种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。分析:不能按格子遍历,无法找到对称点,必须按格子四周的点遍历,这样也可以控制图案,以(3,3)为初始点,所以开始必须提前标记为1。大概思路就是走一步标记该点以及和它对称的点。AC代码:#include&lt

2022-03-10 10:13:16 515 1

原创 LibreOJ - 10135 祖孙询问(LCA查询最近公共祖先)

链接题意:给出两个数,查询这两个数是否在同一个大的分支里分析:模板题,最后LCA查询的时候如果一个是另一个的祖先,则满足条件。#include<bits/stdc++.h>using namespace std;const int N=40010,D=50;int head[N],deep[N],fa[N][1000];//1000代表层数,要尽量大点,否则结果出错 int num; struct node{ int to,nex;}e[2*N];void add(int

2022-03-08 09:11:05 109

原创 切糕(前缀)

题目描述小沙觉得括号真是一个神奇的东西,以至于他看什么都觉得这东西像一串括号,小沙买来了切糕,他准备将它分成几份拿来吃,但是小沙突然希望把他眼中的括号切糕全部切成合法的括号切糕。请问小沙有多少种切法,不同的切法仅看 切的位置,如果有一个位置切的不同,那么切法就不一样。如果你无论如何也切不出来合法切糕,那么 输出-1合法的括号:指对于一个字符串他的左括号数量和右括号一样多,且对于任意前缀左括号始终不小于右括号数。字符串的前缀:指字符串的从第一个字符开始,到任意字符停止的一个字符串。左括号 (

2022-03-05 10:11:19 134

原创 平面切分(数学)

传送门分析:两条直线如果平行则有3个平面,所以没加条直线,至少增加一个平面。每增加一个结点(之间没有出现的)就多一个平面。所以遍历直线与之前的直线求交点,如果之前交点未出现,就加1。求交点的 相除 会有小数,一定要保留,否则误差太大,所以要取一定的精度,代码是把误差缩小在0.00001内。AC代码:#include<stdio.h>#include<algorithm>using namespace std;const int N=10010;int a[N

2022-03-02 09:27:02 1009 2

原创 子串分值和(思维)

链接题目描述对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S) 为 SS 中出现的不同的字符个数。例如 f(“aba”) = 2,f(“abc”) = 3, f(“aaa”) = 1f(“aba”)=2,f(“abc”)=3,f(“aaa”)=1。现在给定一个字符串 S [0…n − 1]S[0…n−1](长度为 nn),请你计算对于所有 SS 的非空子串 S [i…j](0 ≤ i ≤ j < n)Si…j,f(S [i…j])f(S[i…j]) 的和是多少。输入描述输入一行包

2022-03-01 11:35:51 434

原创 字串分值(思维)

问题描述对于一个字符串 S ,我们定义 S 的分值 f(S) 为 S 中恰好出现一次的字符个数。例如 f(“aba”)=1,f(“abc”)=3, f(“aaa”)=0。现在给定一个字符串 S[0…n-1](长度为 n),请你计算对于所有 S 的非空子串 Si…j,f(S[i…j])的和是多少。输入格式输入一行包含一个由小写字母组成的字符串 。输出格式输出一个整数表示答案。样例输入ababc样例输出21样例说明子串 f值a 1ab 2aba 1abab 0ababc 1b

2022-02-28 15:05:09 692

空空如也

空空如也

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

TA关注的人

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