- 博客(50)
- 资源 (4)
- 收藏
- 关注
原创 Project Euler 622
题目链接:点击打开链接题意:题目定义完美洗牌方式,s[i]表示i张牌时需要洗多少次回到最初情况,求s[i]=60的所有i的总和。易知,我们每次洗牌可以转化为公式(2*i-1)(mod n-1)(n为牌数),也就是s[i]等于 2 mod(i-1)的阶数,进而对求s[i]=60的i的总和可以转化为求2^60-1的所有因数加一的和(需要特别把2的低次幂-1的因数给排除掉)。代码:#include<...
2018-03-12 16:13:54 331
原创 2017多校训练第一场
1001这是一道签到题求出满足10^k1002这是道贪心算法的题,需要我们给每个字母赋一个贡献值,使得所有数的和最大。先把每个字母都看做1,然后按每个字母对结果的贡献排序来分别赋值,由于每个字母的贡献的极大且为26进制,我们可以使用数组来表示每个字母的每一位,然后按位比较大小即可,另外,由于不存在前置0,所以我们需要标记一下出现在首位的字母,最后找出不在首位里的贡献最小的数赋值为0
2017-07-26 15:34:31 521
原创 URAL-1979 Resources Distribution
一个正方体每个面分为n*n个小方块,每个小方块填上1~6*n*n的数字,要求所有方块数字不一样且绕一圈数字和相同。容易知道所有的绕圈方式一共有3*n种,而这些绕圈方式每个方块一共会被遍历两次,所以可以计算 (1+6*n*n)*6*n*n/2(所有数字和)*2=3*n*S(S为一圈的数字和) 得S=
2017-07-08 10:33:49 586
原创 codeforces Educational Codeforces Round 21 D. Array Division
分两种情况,一个是后面的数放到前面,另一种是前面的数放到后面(其实还有一种是无变化,可以放到其中一种来看)分别记录前缀和和后缀和,用两个map记录某个数出现的最早坐标和最晚坐标,首先如果总和是奇数就输出NO,否则就进行从前向后遍历,若出现 最晚坐标的map[总和/2-前缀和]>当前坐标 就输出YES,若出现总和/2==前缀和也输出YES,另外再从后向前遍历一遍,用后缀和和最早坐标的
2017-05-16 12:12:14 311
原创 codeforces Educational Codeforces Round 21 C. Tea Party
先把所有的杯子按尺寸大小排序,然后把每个杯子都倒上一半,若是不够就输出-1,若是没倒完就从尺寸大的开始都倒满,一直到把所有茶都倒完,因为排序的时候后打乱顺序,所以用结构体来记录杯子序号即可。#include#include#include#include#include#include#include#include#include#include#include#inc
2017-05-16 12:03:39 349
原创 codeforces Educational Codeforces Round 21 B. Average Sleep Time
可以先把每一天的贡献次数乘上睡眠时间,最后加在一起除以(n-k+1)即可#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#defin
2017-05-16 11:58:38 284
原创 codeforces Educational Codeforces Round 21 A - Lucky Year
只要把最高位加一再乘以位数即幸运年,再减去最初的即可。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#define inf 2
2017-05-16 11:54:18 286
原创 aoj-2249 Road Construction 单源最短路dijkstra+堆优化(模板)
先用dijistra求出capital到其他的各个点的最短距离,然后最后遍历一遍各个边,把之前用到的最短距离的边的最小消耗加在一起即可。(详见代码)#include#include#include#include#include#include#include#include#include#include#include#include#include#define
2017-05-07 23:10:06 512
原创 Educational Codeforces Round 20 B - Distances to Zero
没什么好说的,直接暴力两遍即可#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#define inf 2*0x3f3f3f3f#define l
2017-04-30 10:40:21 354
原创 Educational Codeforces Round 20 A - Maximal Binary Matrix
就是一个n*n方阵,有k个1放在里面,然后要求对角线对称且字典序最大,如果k>n*n就输出-1,否则就看半边,遍历一遍,k足够放两个1的话,就放一个1,然后每次换行的时候要判断还剩几个1没放,剩一个就放在对角线,如果还剩两个的话就在对角线连放两个1,然后再把另外半边对称放上就ok了(详见代码)。#include#include#include#include#include#incl
2017-04-30 10:17:37 292
原创 HDU1272 小希的迷宫 并查集
简单并查集,建立并查集后每次询问是否根节点相同,若连接过程有相同就输出No,最后检验下是否所有的根节点都一样(检测是否都连在一起了),都连在一起就输出Yes,反之输出No。#include#include#include#include#include#include#include#include#include#include#include#include#inc
2017-04-28 22:13:34 303
原创 POJ 2912 Rochambeau 并查集+枚举
和食物链那题很像,只要把裁判枚举一遍即可,当前枚举的裁判不参与矛盾判断,没有矛盾的组数为0时,即Inpossible,大于1时就是Can not determine,等于1时是可以确定裁判的,裁判即没有出现矛盾的那一组枚举的人,判断轮数即所有枚举情况中的出现矛盾的最大轮数。#include#include#include#include#include#include#includ
2017-04-28 17:30:06 335
原创 POJ 2492 A Bug's Life 简单并查集
直接建立2*n的并查集,如果x和y没有连着就把(x+n)和y连起来,x和(y+n)连起来,反之就是有错误,一定记住要把数据输完,wa了好久发现这个问题。。。#include#include#include#include#include#include#include#include#include#include#include#include#include#in
2017-04-27 23:39:06 334
原创 POJ 1733 Parity game hash离散化+带权并查集
由于数据范围过大,所以需要进行hash离散处理,然后就是建立并查集,ranks[x]表示节点x到根节点奇偶性,然后每次更新一次权值就好了,输出第一次错的位置。#include#include#include#include#include#include#include#include#include#include#include#include#include#i
2017-04-27 22:49:42 336
原创 POJ 1456 Supermarket 贪心+优先队列
可以从截止日期最大的一天开始循环,优先队列来维护队列中的利益最大值,把截止日期等于当天的加入到队列中,每个日期在队列中有成员时都要选其中的最大值即可。#include#include#include#include#include#include#include#include#include#include#include#include#include#inclu
2017-04-27 15:40:17 371
原创 POJ 1182 食物链
可以建立3*n的并查集,x,x+n,x+2*n分别代表一个食物圈。即若x和y属于一个类别的情况就是x和y连接,(x+n)和(y+n)连接,(x+2*n)和(y+2*n)连接;如果x吃y,那么x和(y+n)连接,(x+n)和(y+2*n)连接,(x+2*n)和y连接。依次连接即可#include#include#include#include#include#include#incl
2017-04-26 13:06:49 356
原创 HDU 3038 How Many Answers Are Wrong 带权并查集
用par[x]表示x的根节点,用ranks[x]表示x到根节点的距离,记得每次都要更新一遍ranks数组(题目中没说有多个输入,结果改了好久才发现加上while后瞬间就ac了。。。)#include#include#include#include#include#include#include#include#include#include#include#include
2017-04-26 12:37:48 233
原创 HDU1213 How Many Tables 并查集
并查集水题,建立n并查集,然后把认识的人都连起来,最后算一下父亲的数量即可(输入里的空一行是什么鬼。。。)#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3
2017-04-25 20:12:49 238
原创 POJ1611 The Suspects 并查集
没什么好说的,建立n的并查集,把每个group的人都连起来,最后遍历一遍即可。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#define in
2017-04-25 19:51:44 293
原创 Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) D. Volatile Kite
可单独拿一个点来看,如果要使凸包退化,即使得其与其的相邻两点变成至少三点共线,这种情况的移动最小距离是以其相邻两点为底,该点为顶点的三角形的高的一半,所以二分答案,遍历每个点求三角形的高的一半和该值作对比即可#includeusing namespace std;int n,px[1005],py[1005];double l=0,r=1e9;double distance(doubl
2017-04-17 19:50:26 402
原创 Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) C. Voltage Keepsake
直接二分即可,右端点的初始值要设大一些,然后直接循环若干次,若大于一个足够大的数就输出-1,否则就输出左端点#includeusing namespace std;int n,p,a[100005],b[100005];double l=0,r=1e15;bool check(double x){ double ret=0; for(int i=0;i<n;i++)r
2017-04-17 19:44:38 382
原创 Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) B. Valued Keys
只要y的每个字母都小于等于x的就直接把y输出,否则输出-1#includeusing namespace std;string s1,s2;int main(){ cin>>s1>>s2; for(int i=0;is1[i])return cout<<-1,0; cout<<s2; return 0;}
2017-04-17 19:40:59 368
原创 Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) A. Vicious Keyboard
改一次最多增加一个,遍历一遍即可#includeusing namespace std;char s[105];int cnt=0,flag=0;int main(){ cin>>s; for(int i=0;i<strlen(s)-1;i++) { if(s[i]=='V'&&s[i+1]=='K')cnt++,i++; el
2017-04-17 19:39:04 386
原创 Educational Codeforces Round 19 C. Minimal string
输入一个字符串,从左开始进行操作,每次可以把一个字母输出来,也可以把它放进一个栈里,可以随时取出输出,最终要求输出一个所有情况中的字典序最小的一种。首先先记录一下每个字母的个数,方便动态的情况下找最小值,然后就开始遍历了,每次遍历找一下当前位置向右的所有字母的最小值如果这个值小于栈的最上面的字母就把这个字母放进栈内,否则就把栈里的最上面的输出,最后再把栈里的字母都输出即可。#include
2017-04-16 19:24:59 354
原创 Educational Codeforces Round 19 B. Odd sum
想了想是可以贪心过的,先遍历一遍,记录大于等于0的数的偶数个数和奇数个数,然后进行从大到小排序,如果所有值都小于零,那么遍历一下输出第一个奇数;如果奇数个数是奇数,直接把大于零的数全部加起来即可;如果奇数个数是零,那么先把所有正数加起来,在加上负数里的第一个奇数;剩下的情况就是正数的奇数个数为偶数(非零),这种情况可以先把所有正数加起来,然后比较负数里的第一个奇数和正数里的最后一个奇数的绝对值大小
2017-04-16 19:14:45 370
原创 Educational Codeforces Round 19 A. k-Factorization
分解因数,质因数分解后(同时放进栈里)个数如果小于k,输出-1,否则就输出栈里的k-1个数,然后n/(前k-1个乘积,k=1时为1)#includeusing namespace std;int n,k,m[100005],num=0,res=1,nx;int main(){ cin>>n>>k;nx=n; memset(m,0,sizeof(m)); for(
2017-04-16 19:06:01 408
原创 HDU1542 Atlantis 线段树扫描面积
第一次做面积扫描的题,首先进行数据的离散化排序,建立线段树,把整个图形从下到上一次求值,如图,我们每次更新最下面的边的长度,首先是AB长度,之后可以AB*AP,这是第一部分面积,接着继续更新向上面的一层,即PQ长度,之后PQ*CP加在之前的面积上,依次类推,我们需要把每个矩形的上下边区分一下,用来更新上一层的长度,如图再向上的长度不是CP',而是Q'P',这个可以结合代码来理解,在离散
2017-04-14 21:58:45 247
原创 HDU1698 Just a Hook 线段树成段更新
基础的线段树成段更新,学习了notonlysuccess dalao的代码后写的#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#define i
2017-04-12 23:20:04 452
原创 POJ 3468 A Simple Problem with Integers 线段树(成段更新)
基本是裸的线段树,维护区间元素和,设一个lazy数组来保存更新数据,区段更新即可。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#def
2017-04-11 23:18:20 239
原创 HDU1754 I Hate It 简单线段树
维护区段最大值,单点更新,区段询问。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#define inf 2*0x3f3f3f3f#d
2017-04-11 23:13:18 259
原创 HDU1166敌兵布阵 简单线段树
裸的线段树,单点更新,每次区段询问即可。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#define inf 2*0x3f3f3f3f#def
2017-04-11 23:09:13 272
原创 codeforces round#408(div.2) C. Bank Hacking
题意:相当于若干个银行构成了一个无根树,我们需要把所有的银行hack掉,刚开始可以随意选一个,后来就只能选被hack过的邻居才行,每个银行都有他们的strength,hack它需要不比它小的strength值,每次hack一个银行后,它的邻居和邻居的邻居strength值都会+1,求hack全部的银行需要的最小strength值。可以想,如果只有一个最大值,那么存在两种情况,如果所有银
2017-04-11 15:59:12 675
原创 codeforces round#408(div.2) B. Find The Bone
题意:经典的游戏(忘了叫什么了。。。),大概是像是某个杯子放了一个球,然后各种换,最后猜在那个里面,只是这道题的话在某些杯子下有一些洞,有球的杯子到了这里球会掉下去不出来。大概就是按着操作来就可以ac了,要注意如果第一个杯子下有洞刚开始就会掉下去。#includeusing namespace std;int n,m,k,x,hole[1000005],u,v,cu=1;in
2017-04-11 11:31:42 468
原创 codeforces round#408(div.2) A. Buying A House
题意:等距离的一列数组表示房子价格(0为有人居住的),输出距离目标的最近的可以买下的房子。数据量很小,直接暴搜一遍即可。#includeusing namespace std;int n,m,k,dis=1e9,x,position;int main(){ cin>>n>>m>>k; for(int i=1;i<=n;i++) { s
2017-04-11 11:18:16 444
原创 模拟退火算法解决01背包问题(matlab实现)
function [maxvalue,result]=SA_bag(value,weight,maxweight)%maxvalue为最大价值,result为最终的物体选取向量,value为价值向量,weight为重量向量,maxweight为重量限制[m,n]=size(value);TF=0.000001;a=0.9;T=100;res=100*n;%初始化,TF为截止温度,a为退火因子,
2017-03-18 11:54:05 8066 1
原创 codeforces round#404(div.2) D. Anton and School - 2
题意:定义RSBS序列,使得该序列为偶数个数(非空),前一半都是左括号,后一半都是右括号;输入一列括号,可将其部分括号删除使得剩下变成RSBS序列,输出删除的方法数。一道数学题,先计算出右括号的总数量r,从左面开始遍历,左括号数量初始为l=0,遇到右括号就r--,遇到左括号就计算不删除该括号和其前面的左括号,右边的右括号组成的RSBS数量,即C(l+r,r-1)(意为当前不算该左括号的
2017-03-16 18:37:47 354
原创 codeforces round#404(div.2) C. Anton and Fairy Tale
题意:一个谷仓共n粒米(最多存放n粒),每天会先送来m粒米,然后会有鸟来吃,第i天会来i只鸟,一只鸟吃一粒米,输出第几天谷仓的米可以被鸟吃完。首先我们先特判一下,当n)然后考虑n>m的情况,前m天肯定是吃不完,从第m+1天开始,每天多来一只鸟,也就是第i天(i>m)会一共吃掉(m+1+2+...+i)粒米,即(1+i)*i/2+m粒米只需找出最小的i使得该值>=n,即满足(i+
2017-03-16 18:16:23 324
原创 codeforces round#404(dv.2) B. Anton and Classes
题意:Anton喜欢下棋和编程,打算去上这两门课,每门课都有若干时间段,Anton想要在课间休息尽可能多的时间,并输出这个时间,若是不能上两节课就输出0。简单贪心,遍历一遍分别找出两门课的最晚开始时间和最早结束时间,然后分别用最晚开始时间减最早结束时间找出最大值。#include#include#include#include#include#include#i
2017-03-16 18:09:52 265
原创 codeforces round#404(div.2) A. Anton and Polyhedrons
题意:有若干立体图形,每个有固定的边数,计算输入图形的总边数。水题,暴力求解即可。#include#include#include#include#include#include#include#include#include#include#include#include#include#define INF 0x3f3f3f3f#define
2017-03-16 18:06:25 290
原创 aoj0189 Convenient Location floyd-warshall最短路
题意:给一个连通图,每条边带权值即距离,找出这些点里到其他各点总距离的最短的一个,并输出该距离。由于数据量比较小,又是多点间的最短路,所以使用floyd-warshall算法,用dp思想可满足dp[k][i][j]=min(dp[k-1][i][j],dp[k-1][i][k]+dp[k-1][k][j]) (从i出发经过k或者不经过k的最短路)可将其用一个二维数组不断更新得
2017-03-15 16:48:57 423
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人