自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 CodeForces - 1165D 纯思维

理解错题意导致就是过不了题意: 给出了一个数组,要求找出最小的数满足它的因子全是数组里的数且不包含1和它本身,如果没有输出-1,数组是这一个数的因子,而不是说它本身也可能是一个因子在数组中。思路:排序,将最小的乘以最大的,从头和尾依次判断成绩是否是那一个数,如果不是输出-1,如果是还要看一下这个数的因数全在这个数组里,如果有缺的输出-1,没有则输出这一个积。注意for循环判断一个数的所有因数要对其取根号,因为如果这个数是1e10,那就超时了。#include<bits/stdc++.h>

2021-08-03 09:49:22 144

原创 CodeForces - 1213D2 Equalizing by Division (hard version) 思维题

题意:给了n个数,可以对每一个数进行除以二的操作,求最少操作多少次可以使得有k个相等的数。思路:比赛的时候想的是记录每一个数出现的次数,然后从大到小将每一个数全都进行操作,并且记录操作次数,实际上操作得到几个相等的数的时候并不一定要这一个数全部进行操作的,所以我们应该对每一个数都进行操作,并且记录它得到的每一个数以及操作的次数,然后在对于每一个满足条件的数进行判断,看一下得到这一个数需要多少次操作,记录最小的操作数。这一题是一个思维题,我就是脑残,为什么要想着把一个数全部往下除二呢,对全部的数往下除二操

2021-08-02 14:40:15 163

原创 CodeForces - 701C尺取法

尺取法,码上了#include<bits/stdc++.h>using namespace std;int flag[200];int place[200];int main(){ int n; string s; cin>>n; cin>>s; int sum=0; for(int i=0;i<n;i++){ if(!flag[s[i]]){ flag[s[i]]=

2021-03-30 23:13:46 124

原创 Tree Reconstruction UVA - 10410由dfs和bfs求树

题意:给出某个树的bfs和dfs两种不同的遍历//按照编号从小到大的顺序访问,求出这个树每个节点的子节点,我的思路是一bfs为基准通过dfs为辅助,确定每一个节点的父节点#include <bits/stdc++.h>using namespace std;int main(){ int n; vector<int> ans[1005]; vector<int> change; int bfs[1005]; int dfs[

2021-01-21 20:52:56 77

原创 修改天平uva-12166//没有dfs

全网基本用的都是dfs深度搜索,但是我的做法没有用到,通过一个数前【和】出现的次数来判断它所在的层数,对于每一个砝码求如果以它为基准则天平总质量的大小,然后求得出现次数最多得一个天平总质量,令所有砝码的个数减去这个出现最多天平总质量的次数就是答案了#include <bits/stdc++.h>using namespace std;typedef long long ll;string s;int cnt=0;int qiu(int a, int b){ cnt++;

2021-01-17 19:51:12 53

原创 哈密顿绕行世界问题 HDU - 2181(dfs回溯)

题意: 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市。Input前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行以后每行有1个数m,m<=20,m>=1.m=0退出.Output输出从第m个城市出发经过每个城市1次又回到m的所有路线,如有多条路线,按字典序输出,每行1条路线.每行首先输出是第几条路线.然后个一个: 后列出经过的城市.思路:这一题是很基本的dfs和回溯,模板void

2021-01-14 16:24:41 72

原创 Free Weights Gym - 101170F//竟是二分

题意:给出两行等长数组,每个数代表着一个杠铃的重量,求最小要举起来杠铃的质量使相同质量的杠铃相邻(在一行相邻才行,上下两行的相邻不算),每行可放的杠铃数不限,且质量大的杠铃可以在同一行上滚动。思路:(当求的答案是一个数的时候,一般由两种解法,一是直接模拟求出来,二就是二分枚举出来这个答案)当你发现这个答案很难通过模拟来操作出来结果的时候,那么就二分来判断当前值是否合适,即由答案来模拟是否可行。本题就是要通过二分来确定最小的重量Hint:此外用数组一顶要注意范围,所以vector它不香么!!!,包括str

2020-12-20 16:19:10 107

原创 Monkey and Banana HDU - 1069//初入动态规划

题意:给出多种方块,问在满足下一层方块比上一层方块的长宽都大的情况下,这个叠方块最大能有多高。思路:根据题意要把能放的长方形放在上面,这就有状态转移的感觉,于是我们就把长方形由小到大排好序,从最小到最大按照dp【i】=max(dp【i】,dp【j】+height【i】)的状态转移方程遍历,最后输出最大的高度即可,此外要注意一种尺寸的长方形可以得到六种长宽高不同的长方形。#include <bits/stdc++.h>using namespace std;typedef long lon

2020-12-17 21:02:09 60

原创 Marlin CodeForces - 980B

题意:给定表的大小和宾馆的个数,对于给的宾馆数问能不能将宾馆都放在图上并且从左下角到右上角与从左上角到右下角最短路的数目相同。思路:对于偶数个,只要上下对称就可以满足条件,但是对于奇数个该如何判断,不要去想当然,觉着可以就可以了,或者编码通过bfs和dfs算一下不同情况下的最短路,一定要确保编码的思路是正确的才能保证ac额bfs求一下两个方法的路径个数#include <bits/stdc++.h>using namespace std;typedef long long ll;co

2020-12-08 00:07:39 150

原创 Non-Prime Factors Kattis - nonprimefactors

题意:给出一个数a,求出a的因数中有多少个数是非质数埃筛,直接打出表来,并且输入输出一定要用scanf,cin加速了也不行!!!#include <bits/stdc++.h>using namespace std;const int maxn=2e6+5;int ans[maxn];int isp[maxn];void isprime(){ isp[1]=1; for(int i=2;i<=maxn;i++){ if(!isp[i]){

2020-11-30 19:19:30 100

原创 UVA - 11624 Fire! bfs (2.进阶,bfs的次数与时间复杂度)

题意:给出一个迷宫,‘ . ’代表通路,‘ # ’代表着不通,J代表着人,F代表着火,人和火每移动一个格子都要1分钟,并且只能上下左右移动,问人能在火焰一直蔓延的情况下逃出去吗?题解:这一题要先对火焰进行bfs,将所有能烧到的地方都标记上,这里首先对有火焰的地方都入队,然后bfs,而不是对图进行搜索,分别对每一个火焰进行bfs求出每一个的最快到达时间,因为每一次bfs都要搜完全图,把火焰都先入队只搜索了一次全图而每个火焰都搜索一次则对图搜索了火焰数乘以图标全部,时间直接爆炸,然后再对人进行bfs,对人进行

2020-11-12 17:04:32 110

原创 POJ - 1321棋盘问题 dfs(思路的提高和深搜的熟练)

在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n当为-1 -1时表示输入结束。随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区

2020-10-31 20:07:07 86

原创 POJ - 3278 Catch That Cow bfs(2.进阶,宽搜的范围考虑与宽搜剪枝)

Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes o

2020-10-31 16:21:24 69

原创 POJ - 3984迷宫问题 bfs(2.进阶)

定义一个二维数组:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。Input一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。Output左上角到右下角的最短路径,格式如样例所示。Sample Input0 1 0 0

2020-10-30 19:08:17 108

原创 POJ - 3414 Pots bfs(2.进阶)

小明给你两个容器,分别能装下A升水和B升水,并且可以进行以下操作FILL(i) 将第i个容器从水龙头里装满(1 ≤ i ≤ 2);DROP(i) 将第i个容器抽干POUR(i,j) 将第i个容器里的水倒入第j个容器(这次操作结束后产生两种结果,一是第j个容器倒满并且第i个容器依旧有剩余,二是第i个容器里的水全部倒入j中,第i个容器为空)现在要求你写一个程序,来找出能使其中任何一个容器里的水恰好有C升,找出最少操作数并给出操作过程Input有且只有一行,包含3

2020-10-29 17:47:36 132

原创 POJ - 3126 Prime Path bfs(1.初入)

题意:输入两个素数,均是大于1000的四位数,在第一个数的基础上每次只能改变一位数,并且得到的数也要是素数,求至少多少次能够得到给的第二个素数bfs宽度优先搜索,原来至始至终没怎么接触过bfs,知道现在开始接触bfs,是真的被惊讶到了,bfs竟然这么强大,对于这个思路,还是要注重看搜索,这样就好理解了。思路:我们想求把第一个数变成第二个数最小改变次数,我们是不能直接得到这个最小改变量的,那么怎么由第一个到要求的数,我们要去搜索,先找出第一个数在改变第一次就能得到的数,然后存下来,再有改变第一次找出改变第

2020-10-26 08:14:51 92 1

原创 L2-007 家庭房产 并查集啊

给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。输入格式:输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产:编号 父 母 k 孩子1 … 孩子k 房产套数 总面积其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数;孩子i是其子女的编号。输出格式:首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输

2020-10-24 20:45:43 79

原创 CodeForces - 1269B B - Modulo Equality

思路:考虑时间效率,可以选择暴力数组求解,题意!题意!题意!有时候一个题想多了,题意自己就给改了!!!#include <bits/stdc++.h>using namespace std;const int maxn=0x7fffffff;int a[4005];int b[4005];int n,m;int pd(int cha,int i){ for(int j=0;j<n;j++){ if(b[j+i]==(a[j]+cha)%m) cont

2020-10-16 12:02:57 116

原创 HDU - 6182 A Math Problem

给出一个正整数n,请数数有多少正整数k满足k的k次方 <=n本地打表或者通过快速幂均可#include <bits/stdc++.h>typedef long long ll;using namespace std;ll qpow(ll a,ll n){ ll prot=1; while(n){ if(n&1) prot=prot*a; a=a*a; n>>=1; } retur

2020-10-12 15:10:55 355

原创 最大值情况 CodeForces - 1321C

题目大意:刚刚折腾完增加字符的操作,现在就来搞删除吧,给你一个由小写字母组成的字符串s,现在要做删除操作,不过不能随便删,要求是某个字母的两边,存在一个字母序小1的字母的时候,它就可以删除,例如说,“cabcb”,第二个c旁边有b就可以删除它,剩下"cabb",然后中间的b旁边有a,删除它,剩下"cab",再删一个b,最后得到"ca",一共删除了3个字符一开始wa的思想,想着从头到尾遇见前一个比第二个大一的就删除第一个或者遇见逐渐增大的查询到最大的那一个数就删除,每当删除就从头开始,但是这个题让输出最多

2020-10-07 17:55:41 104

原创 Gym - 101775A与快速幂和除法求模

首先是快速幂的算法ll qpow(ll base ,ll power){ ll pro=1; while(power){ if(power&1) pro=pro*base%mod; base=base*base%mod; power>>=1; } return pro;}其次是求逆元什么是逆元当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法:设c是b的逆元

2020-10-05 22:51:21 134

转载 突然发现贼有用的lower-bound()与K - Downgrade

lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。在从小到大的排序数组中,lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到

2020-10-04 19:47:26 144

原创 7-2 符号配对 (20分)

7-2 符号配对 (20分)请编写程序检查C语言源程序中下列符号是否配对:/与/、(与)、[与]、{与}。输入格式:输入为一个C语言源程序。当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束。程序中需要检查配对的符号不超过100个。输出格式:首先,如果所有符号配对正确,则在第一行中输出YES,否则输出NO。然后在第二行中指出第一个不配对的符号:如果缺少左符号,则输出?-右符号;如果缺少右符号,则输出左符号-?。#include <bits/stdc++.h>using n

2020-09-28 23:31:02 3083

原创 CodeForces - 1363B

题意:输入一个只有1和0的字符串,将此字符串变成11111110000000或0000000001111111型的最小改变量。思路:比如一个字符串长为5,那就枚举变为01111、00111、00011、00001、00000、10000、11000、11100、11110、11111.每个最小改变量即可。只要知道思路,代码不难。但是这思路怎么想到呢!!!难啊#include <bits/stdc++.h>using namespace std;int main(){ int t

2020-09-25 00:01:18 189

原创 数据结构反思2

1.数据结构7-14题,要输出前m名大富豪,如果总人数n小于m呢???? 所以输出的次数一定小于m和n!!!!!!!!2.string输入要用cin,如果非要scanf 就 string a; a.resize(100); //需要预先分配空间 scanf("%s", &a[0]); printf("%s\n", a.c_str()); return 0;3.map的删除、寻找等于迭代器的使用以及本身的存储顺序!!!最近敲代码真的是各种问题,链表居然让

2020-09-17 00:10:20 124

原创 数据结构反思1

1.在单链表中,若p所指的结点不是最后结点,在p之后插入s所指结点,则执行s->next=p->next; p->next=s;注意插入链表时的顺序,不要因为顺序颠倒而使p->next丢失在本题的第二个函数脑子就傻了,不知道循环单链表什么时候终止了循环单链表区间删除本题要求实现带头结点的循环单链表的创建和单链表的区间删除。L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于ma

2020-09-13 23:17:00 123

原创 Fear Factoring 除法分块

The Slivians are afraid of factoring; it’s just, well, difficult.Really, they don’t even care about the factors themselves, just how much they sum to.We can define F(n)F(n)F(n) as the sum of all of the factors of nnn; so F(6)=12F(6) = 12F(6)=12 and F(12)

2020-08-07 20:40:06 127

原创 Codeforces 1389c good string

Let’s call left cyclic shift of some string t1t2t3…tn−1tn as string t2t3…tn−1tnt1.Analogically, let’s call right cyclic shift of string tas string tnt1t2t3…tn−1.Let’s say string tis good if its left cyclic shift is equal to its right cyclic shift.Yo

2020-08-02 21:55:10 606

原创 manacher 求最长回文串

manacher 马拉车。在vjudge上用string会output limited exceeded,实在搞不懂,就用char的数组吧。#include <iostream>#include <cstring>#include <cstdio>#include <string>using namespace std;const int l=1000000;int Len;char s[2*l+5];char str[2*l+5];//

2020-07-23 15:53:55 51

原创 J.Tunnelling the Earth

题意:给出地球上两点的经纬度,求出两点穿越地球的直线距离以及球面上的最短距离。思路:通过经纬度直接求距离肯定不会,地球立体的那么就转换为里地坐标系,经纬度就是球面坐标,通过球面坐标系转换为xyz坐标系,其中直线距离好求,球面上的距离要求两点与球心连线的角度,利用余弦公式即可(注意pi=acos(-1)),代码如下#include <bits/stdc++.h>using namespace std;const double R = 6371009;const double PI = a

2020-07-20 21:31:06 63

原创 GPA

Problem Description小沃沃一共参加了 4 门考试,每门考试满分 100 分,最低 0 分,分数是整数。给定四门考试的总分,请问在最优情况下,四门课绩点的和最高是多少?分数与绩点之间的对应关系如下:95~100 4.390~94 4.085~89 3.780~84 3.375~79 3.070~74 2.767~69 2.365~66 2.062~64 1.760~61 1.00~59 0Input第一行一个正整数 test(1≤test≤401)test(1

2020-07-19 22:02:22 253

原创 codeforces 1365c最多偏差量

题意:先给出一个数n,再给出两列从1到n随机排列的数组,可对每个数组进行左移操作或右移操作,求每个位置对应相同的个数最多是多少个思路:分别记录第二列的每一个需要移动多少次到达第一列中的位置,对需要移动的位置长度计数,移动最多的数就是能对应的最大个数。#include <bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; int a[200005],m; for(int

2020-06-10 15:25:18 333

原创 CodeForces 1363a思路

题意:给定n和x,并输入一个长度为n的数组,问能否找出x个数相加为奇数,如果可以输出yes,不然输出no思路:数的和为奇数还是偶数关系到奇数和偶数的多少,所以首先统计奇数和偶数的多少。然后再想一下它们的和与奇数和偶数个数的关联,奇数的个数必须是奇数个才可以,并且此时的所需要偶数个数应该小于所有的偶数个数,于是就从1一直模拟到odd的个数。另一个方法,只存在三种情况为no。1.odd=0。2.even=0并且x为偶数。3.x=n并且odd=偶数。//法1#include <bits/stdc

2020-06-06 20:52:35 176

原创 codeforces 1362c 规律题

这就是cf么。题意:输入一个数n,求从将0到n中的数均化为2进制,并求出每相邻两个不同的位数并相加思虑:n的范围是10^18,想都不用想,肯定要找规律,当输入n时,能根据规律直接输出sum,//列举n=1,sum=1;n=2,sum=3;n=3,sum=4;n=4,sum=7;n=5,sum=8;n=6,sum=10;n=7,sum=11;n=8,sum=15;找规律也不能乱找,就对着n乱想怎么操作对应到sum这就太扯淡了,有操作步骤还是按着步骤找规律//n=5;0000

2020-06-05 18:19:49 508

原创 codeforces 1362a简单的打表

题意:有a,b两个数,让a<b,有三种操作(*2,*4,8)问由a到b至少要操作几次,若不可以输出-1思路:2的一次方,2的二次方,2的三次方,所有只要a2的一个次方等于b就可以了,注意这里不能是b/a是二的次方(在为long long 类的时候)所以这里只要把2的所有次方打一个表就可以了(长度60就够了)当找出a乘以的是2的几次方时,这个题没什么难的地方了提一下1363b的异或操作:^,cf的时候现学现敲可还行???...

2020-06-05 16:48:42 253

原创 两次实验总结

上个周末无与伦比的忙,忘记了写实验总结,补上补上。主要是a题://这是一个多态的题,但老师提前布置了,不过动动脑子不用多态也可以定义Person类,1.有一个int类型属性age和1个char类型属性sex,分别为年龄和姓名。2.构造函数和析构函数,输出如样例所示的信息。定义Student类,是Person类的子类:1.有一个int类型属性,是学生所在的班级号。2.构造函数与析构函数,输出如样例所示的信息。定义Teacher类,是Person类的子类:1.有一个int类型属性,表示老师的工

2020-06-02 23:32:16 328

原创 codeforces 1353d 优先队列

题意:给出一个数n,即为一个长度为n数值全为0的数组,要求对他进行n次操作,每一次操作都选取由0组成的最长段,让(f+l)/2变为操作的次数。(f是均为0的这段数组的起始位置,l是终止位置)最后输出这个长度为n的数组。思路:模拟每一次的操作给它赋值,最后输出即可。那我们怎么去模拟找到f和l呢?如果我们遍历这个数组去找肯定可以,但这样就是O(n*n)。超时是毫无疑问的,模拟是不可避免的,那么我们只能操作怎么找到这个f和l,一次就能找到就可以了,那么就有了优先队列的思路,把所有的0段都存进去,直接处理第一个即

2020-05-23 10:47:45 197 1

原创 实验七总结

A、B两题都涉及模板数组类的问题无论学的什么,课后都要比这敲一遍,没坏处,觉得不会考这个,学完就没怎么敲,那可还行???1.下标运算符别忘T &operator[](int a){ return p[a]; }2注意输出格式,按从大到小的顺序输出前n大元素,若数组长度小于n则从大到小输出全部元素。这就要注意sort还有n和length的比较。3.重载>和<是真的忘了。。。 bool operator>(Data b){

2020-05-21 15:32:10 110

原创 codeforces 1355a 纯思路

题意:输入了a1和k,满足a(n+1)=an+minDigit(an)⋅maxDigit(an).求出来ak。思路:先看这一个题给的条件的范围,(1≤a1≤1e18, 1≤K≤1e16)。一看范围这么大,这题肯定不会是模拟,模拟肯定会超时,也不会是打表之类的,因为给的数据范围实在是太大了。这题一定会有规律的。这里就涉及到英语题面的理解了, Here minDigit(x) and maxDigit(x) are the minimal and maximal digits in the decimal r

2020-05-19 14:23:12 275

原创 codeforces 1352b 思路题很舒服

题意:输入n和k,要求判断有没有k个偶数加起来能等于n,或是k个奇数加起来等于n,如果有还要分别输出这k个数。思路:看看样例,理解理解题意,我们很容易想到如果k>n,那么肯定会是no。只有当k<=n的时候才有可能出现yes。k=n的时候就是输出一列1了,那么k减少就是一列1的组合,k=n-1的时候肯定是一群1和一个2,肯定不对,k=n-2的时候就是一群1和一个3。如果是奇数就一直到1,但是如果是偶数那么就到n/2,小于等于n/2的都能被偶数分解,原理同1的时候一样。//可别觉得两个都是偶数时

2020-05-17 22:53:36 245

空空如也

空空如也

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

TA关注的人

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