自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU-5881-Tea-找规律+数学推导

题目链接题意:有一壶水,不知道有多少升,但是知道在[L,R]。每次可以向两个茶杯中倒一定量的茶,(可以控制多少),每次倒完之后可以知道茶壶里面是不是空的。最终的目标是控制两个茶杯中的茶不超过1升,茶壶中剩余不超过1升。问最多多少次可以完成要求。思路:可以分析,最优的策略就是先向一个茶壶中到(L+1)/2 ,另外一个倒(L+3)/2升,然后交替到2升,再排除一些特例就好了。#include<bits/

2016-09-19 21:37:22 338

原创 HDU-5878-I Count Two Three-预处理+二分

题目链接题意就是给定一个n,求不小于n的一个只有2,3,5,7为因子构成的数(包括1)思路预处理出所有的满足的数,然后二分一下就好了。#include<bits/stdc++.h>#define maxn 1000000000using namespace std;int x[5]={1,2,3,5,7};int x2[5]={1,30,19,13,11};long long a[5555

2016-09-19 21:26:58 243

原创 HDU-5879-Cure-打表模拟(水)

题目链接题意求∑i=1n1i2\sum^{i=1}_{n}{\frac{1}{i^2}}思路:打表预处理小的。注意输出可能是大数#include<bits/stdc++.h>using namespace std;double ans[10000110];char s[111111];int main(){ ans[0]=0.0; for(int i=1;i<=100000

2016-09-19 21:22:57 631

原创 HDU-5884-Sort-二分加多叉哈夫曼树

题目链接题意:给你n个已经排好序的序列。然后求最小的k,使得每次最多合并k的序列,合并的费用是合并序列的总长度,最后使得总费用小于T。思路:二分k,对于每个k求一个k叉哈夫曼树,注意要补0.#include<bits/stdc++.h>#define maxn 111111using namespace std;int a[maxn];int n;long long T;long lon

2016-09-19 21:15:35 333

原创 HDU-5868-Different Circle Permutation-Burnside定理和polay计数

题目链接题意:等价于在一个环上,有n个点,可以染成白色和黑色,问在黑色不可以相邻,在旋转同构意义下的方案数有多少?环上的计数问题,基本都可以用burnside定理和polay计数来计算。思路:首先先确定有n种置换,即旋转n个角度。对于每一种置换i,其循环节长度为gcd(i,n)gcd(i,n);对于每个长度循环节要求calc(i)calc(i)其实就是f(gcd(i,n))f(gcd(i,n)) 其

2016-09-19 17:01:54 468

原创 POJ-2888-Magic Bracelet-Burnside&&polay计数

题目链接题意:用m中颜色的石头围成一个n个石头的项链。有k对颜色不能串在相邻位置。两种情况通过旋转能重合则属于同一种情况。问有多少种串法。思路:石头串项链问题,一般都用Burnside&&polay计数。首先,一共有n种置换,通项是2∗pi∗kn\frac{2*pi*k}{n},由于不存在对称,只有旋转,所以,对于第k个置换,一共有gcd(n,k)gcd(n,k)个长度为n/gcd(n,k)n/gc

2016-09-16 15:48:09 353

原创 欧拉函数模版和用法

欧拉函数euler(x)返回的是与x互质的数的个数,如euler(8)=4    ps.8与1,3,5,7四个数互质欧拉函数的通式是 euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中pi是x的约数代码实现:int euler(int n) { int ans=n; for(int i=2;i*i<=n;i++)

2016-09-16 13:24:43 727

原创 Burnside引理和polay计数学习笔记

首先提出一个问题,在一个2*2的矩阵里染色,旋转后相同算作一种,问有多少种染色方法。显然穷举有那么多种,然后发现,(3,4,5,6)是同一种,(7,8,9,10)是一种,(11,12)是一种,(13,14,15,16),1是一种,2是一种。发现,颜色少的时候,格子少的时候还是很容易枚举的,但是当问题规模大的时候,计算起来就会比较麻烦。所以我们要来介绍一下Burnside定理和polay计数。首先是B

2016-09-15 00:23:25 4136 4

原创 HDU-5875-Function-STL维护

题目链接题目意思:给定如下的一个一个公式,对于给定一个n个序列,m个询问,给你个l,r求出f值f(l,r)={A[l],f[l,r−1]moda[r],l=rl<r\begin{eqnarray}f(l,r)= \begin{cases} A[l], &l=r\cr f[l,r-1] mod a[r], &l<r \end{cases} \end{eqnarray}思路:可

2016-09-12 16:14:36 552

原创 HDU-5874-Friends and Enemies-构造+找规律

题目链接题意:岛上有m个人(每个人之间要不是朋友,要不是敌人,朋友的朋友可能是朋友,敌人的敌人可能敌人),n种石头,每种石头个数不限,每个用石头串一个项链,两个朋友之间一定至少要用一个石头颜色相同,任何两个敌人之间所有石头颜色都不一样,问对于任何一种情况(敌我关系网),是否都可以有一种项链分配法。思路:显然这题可以转换成给你一个n求最小的ans判断ans和m的关系。首先,n一定要>=m,因为一种显而

2016-09-12 15:56:24 247

原创 HDU-5873-Football Games-数学推导

题目链接题意:给你球队个数和每个球队的得分,问这组数据是否合法。其中,每个球队之间只进行一场比赛。赢的2分输的0分,平局各一分。思路:对于个n个人的集合,总分是n∗(n−1)/2∗2n*(n-1)/2*2不是这个数直接F所以,对于,n个几何的得分情况,按顺序排好,从大往下,减去分数,如果剩下的分数少于(n−1)∗(n−2)(n-1)*(n-2) 那就不满足了。注意n=2的时候就好了#include<

2016-09-11 22:08:16 426

原创 UVA-11609-Teams-组合计数

题目链接题意:就是给你一个n,求1∗C1n+2∗C2n+3∗C3n+...+n∗Cnn1*C_{n}^{1}+2*C_{n}^{2}+3*C_{n}^{3}+...+n*C_{n}^{n}思路:原式就等于 n∗(C0n−1+C1n−1+...Cn−1n−1+Cnn)n*(C_{n-1}^{0}+C_{n-1}^{1}+...C_{n-1}^{n-1}+C_{n}^{n})=n∗2n−1n*2^{n-

2016-09-10 20:55:43 364

原创 Codeforces-396A - On Number of Decompositions into Multipliers-组合计数

题目链接题意:有n个数,他们的乘积是m,将他们分成乘积为m,n个数的有序列,有几种分法。思路:可以将每个质数的个数求出来,然后分配到n个数中,设质数t有ss个,则放到n个数的种数有Cn−1s+n−1C_{s+n-1}^{n-1} 最后把种数给相乘就好。由于因数比较离散,可以用map来优化一下。#include<cstdio>#include<cstring>#include<cmath>#in

2016-09-09 18:47:28 294

原创 HDU-4497-GCD and LCM-组合计数

题目连接题意:a,b,ca,b,c 的GCD是G,LCM是L,问有多少组a, b,c满足要求。思路:先令p=L/G 则p是三个数除去GCD后所需的因子积。我们可以考虑将p因式分解,分别考虑每个因子的种数,最后乘起来就好了。每个因子种数,分为三种情况,设p中有s个因子x,则x因子的种数有C13(一个s两个0)+C23(两个s一个0)+C13∗C12∗(s−1)(一个s一个0一个1到s−1)C_3^1(

2016-09-09 09:51:35 445

原创 HDU-4737-A Bit Fun-TwoPointer

题目链接题意:定义f(i,j)=a[i]|a[i+1]|.....|a[j]f(i,j)=a[i]|a[i+1]|.....|a[j]问有多少对i ,j满足f(i,j)f(i,j)小于m思路1:第一种思路是暴力加剪枝(竟然过了),由于当i不变的时候,j增加的时候,f(i,j)f(i,j) 是递增的。所以可以直接退出#include<bits/stdc++.h>#define maxn 111111

2016-09-08 17:46:51 227

原创 UVA-1121-Subsequence-TwoPointer

题目链接题意:在一串数列中,求连续和大于sum的最小长度思路:用twopointer,用两个指针维护,r表示添加指针,l表示删除指针。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<iostream>#define maxn 111111using namespace std;int

2016-09-08 16:43:46 225

原创 链式前向星模板

struct Edge { int next; ///同一个出发点的另外一条边 int to; ///该条边的终点 int w; ///边的权值}edge[maxn];int head[maxn]; ///以i为起点的第一条储存边的位置。一般初始化为-1int in[maxn];int cnt;void add(int u,int v,int w) { ///添

2016-09-06 19:57:26 334

原创 CSU-1804-有向无环图-拓扑排序+DP

CSU-1804-有向无环图-拓扑排序+DP题目链接:link text思路:可以先求出所有的 ∑nj=1cout(i,j)∗b[j]\sum^{n}_{j=1} cout(i,j)*b[j] 最后成一个a[i]就可以了。至于前面的那一部分的求法可以使用拓扑排序,逆向求。建立一个反向图,然后从入度为0的点开始求在该点的后继节点中累加上当前的ans加上b[当前节点]b[当前节点]。既ans[后继节点]

2016-09-06 19:39:13 430

原创 UVA7042(2014西安H题)-The Problem to Make You Happy-博弈+bfs

题意:给你一张n个点的有向图,并给你B和A的初始坐标(点号)。B和A在图上轮流走,B先走。如果某个时刻A和B在同一点上了,B就输了,B的胜利的条件是B和A永远都不会重合,如果有一方不能走了,那么那一方就输了。思路:f[i][j][0/1(0表示当前是A走,1表示当前是B走)]=0/1 (0表示B输,1表示B赢)开始将f数组全初始化为1,将B必败初始化为0,并存入队列,然后BFS。BFS

2016-09-05 21:05:26 701

原创 NEU-1574-A*B-大数乘法(FFT)

题意:求高精度A*B思路:把A和B的每一位用多项式系数来表示,然后就可以用FFT来加速#include#define pi acos(-1)#define maxn 222222using namespace std;struct plex { ///定义一个复数类 double x, y; plex (double _x = 0.0, double _y = 0.

2016-09-04 17:16:54 362

原创 FFT模板

#define pi acos(-1)#define maxn 222222using namespace std;struct plex { ///定义一个复数类 double x, y; plex (double _x = 0.0, double _y = 0.0) : x (_x), y (_y) {} plex operator + (const plex &

2016-09-04 17:12:05 364

原创 HDU4927-Series 1-组合数学加java大数

题意:一个n个数字的序列,每次生产一个新序列 b[i]=a[i+1]-a[i] 显然每次少一个数,知道只剩一个数,问最后一个数是多少。思路:很容易能推出规律,ans= sigma((-1)^(i)*c(n-i,i)*a[n-i])最后加个java大数就好了import sun.awt.image.PixelConverter;import java.math.BigInteger;

2016-09-01 12:31:34 318

空空如也

空空如也

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

TA关注的人

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