![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm
文章平均质量分 61
bigman_123
这个作者很懒,什么都没留下…
展开
-
母函数模版
/* 1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法*/ #include #include #define N 32767int c1[N],c2[N];void Mu(){ int i,j,k; //模拟手工展开G(x)=(1+x+x^2+,,,,,)(1+x^2+x^4+...)(1+x^3+x^6+...) // x^n的系数就是所求的原创 2012-05-08 20:49:55 · 239 阅读 · 0 评论 -
F题
Problem Description假设:S1 = 1S2 = 12S3 = 123S4 = 1234.........S9 = 123456789S10 = 1234567891S11 = 12345678912............S18 = 123456789123456789..................现在我们把所有的串连原创 2011-11-22 08:57:24 · 482 阅读 · 0 评论 -
Can you solve this equation?(二分)
#include #include #include #include #include using namespace std; double result(double x){ return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6; }int main(){ //freopen("in原创 2012-05-08 21:33:57 · 313 阅读 · 0 评论 -
统计问题(递推)
题目的解法:设ans[n]为走n步的所有不同走法up[n]为第n步是向上时的所有不同走法left[n]为第n步是向左时的所有不同走法right[n]为第n步是向右时的所有不同走法。 则有以下递推关系:up[n] = up[n-1] + left[n-1] + right[n-1]left[n] = up[n-1] + left[n-1]right[n] = up转载 2012-05-23 20:11:45 · 404 阅读 · 0 评论 -
hdu Big Number
思路1:N!除以10^(k-1)(k为N!的位数)等于一个介于1 和10 之间的小数那么就转换成求K。那么在阶乘的过程中超过了10就将结果除以10,k就等于除10的次数加1。#include int main(){ int T,n,ans,i; double x; scanf("%d",&T); while(T--) { scanf("%d",&n); x=1原创 2012-06-10 13:17:39 · 306 阅读 · 0 评论 -
m[]个价值为w[]的货币能否构成value
//判m[]个价值为w[]的货币能否构成value//适合m[]较大w[]较小的情况//返回布尔量//传入货币种数n,个数m[],价值w[]和目标值value#include #include #include#define MAXV 100000int genfunc(int n,int* m,int* w,int value){ int i,j,k,c;原创 2012-05-08 21:04:01 · 426 阅读 · 0 评论 -
关于堆
1. 概述堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。2. 堆的基本操作堆是一棵完全二叉树,高度为O(lg n),其基本操作至多与树的高度成正比。在介绍堆的基本操作之前,先介绍几个基本术语:A:用于表示堆的数组,下标从1开始,一直到nPARENT转载 2012-04-17 20:07:01 · 250 阅读 · 0 评论 -
快速幂取模
/*快速幂取模就是在O(logn)内求出a^n mod b的值。算法的原理是ab mod c=(a mod c)(b mod c)mod c,因此很容易设计出一个基于二分的递归算法。*/long exp_mod(long a,long n,long b){ long t; if(n==0) return 1%b; if(n==1) return a原创 2012-05-08 21:11:49 · 217 阅读 · 0 评论 -
敌国布阵(线段树)
#include#define maxn 50005struct Tree{ int left,right,sum; }tr[maxn*3];int array[maxn];void build(int l,int r,int now){ tr[now].left=l; tr[now].right=r; if(l==r) { tr[now原创 2012-05-08 21:18:48 · 233 阅读 · 0 评论 -
I Hate It (线段树)
#include #include #include #include #include #include #define lson idx<<1#define rson idx<<1|1#define maxn 200005using namespace std;int stu[maxn];struct set_Tree{ int l原创 2012-05-08 21:22:43 · 227 阅读 · 0 评论 -
Computer Transformation(找规律+大数)
找规律时:要注重前后项的联系,可现设 带参数方程,再解方程,求参数!#include#include int result[1001][501];int main(){memset(result,0,sizeof(result));int i,j,n,bit;result[1][0]=0;result[2][0]=result[3][0]=1;for(i=4;i原创 2012-02-24 22:02:14 · 357 阅读 · 0 评论 -
A题
Problem A Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 31 Accepted Submission(s) : 15Font: Times New Roman | Verdana | GeorgiaFont Si原创 2011-11-21 23:20:18 · 259 阅读 · 0 评论 -
Billboard(线段树)
#include #include #include #include #include #include using namespace std; #define maxn 200105int row,col,ans,flag;int an[200105];struct Tree{ int l,r,Max; }tr[maxn*4];原创 2012-05-08 21:24:15 · 224 阅读 · 0 评论 -
错排
//ceil(x)返回不小于x的最小整数值(然后转换为double型)。//floor(x)返回不大于x的最大整数值。//round(x)返回x的四舍五入整数值#include #include #include #include #include #include #include #define PI 3.141592653589793238462原创 2012-05-08 21:26:42 · 394 阅读 · 0 评论 -
Square Coins
#include #include #include #include #include #include #include #define PI 3.1415926535897932384626433832795using namespace std;int val[17]={1,4,9,16,25,36,49,64,81,100,121,144,169原创 2012-05-08 21:31:22 · 237 阅读 · 0 评论 -
骨牌铺方格 (递推)
当有n个方格的时候,有两种铺法: 1)先铺好n-1个格,有f(n-1)个方法,再铺第n层的时候只有一种方法,所以总方法是f(n-1); 2)先铺好n-2格,有f(n-2)个方法,再铺后面两层的时候只能两个都横着铺(否则与第一种情况重复),所以也只有一种情况,总方法数是f(n-2)#include #include int main () { in原创 2012-05-19 13:24:36 · 399 阅读 · 0 评论 -
hdu 1271 整数对
看完题,没啥思路。网上的大牛讲解如下: 假设删掉第k位为数字B,前面的数字段为A,后面的数字段为C,则有: n=A*10^(k+1) + B*10^k + c m=A*10^k + c N=n+m=(11A+B)*10^k + 2c 有:A=N/10^k/11,B可能被2c进位,故分为两种情况:1. B=N/10^k – 11A转载 2012-06-06 21:52:35 · 298 阅读 · 0 评论 -
hdu Employment Planning (dp)
由于题目中未说明工人人数的数据范围,于是用dp先尝试了一下;dp[i][j]表示前i个月(包括i)请j个人所花费的最少费用;那么动态转移方程为:当kdp[i][j]=min(dp[i-1][k]+(j-k)*h+j*s,dp[i][j]);当k>j时dp[i][j]=min(dp[i-1][k]+(k-j)*f+j*s,dp[i][j]);其中h为雇佣工人的花费,s原创 2012-06-07 21:10:11 · 268 阅读 · 0 评论 -
N!
公式N! #include#include#include#include#include#define PI 3.1415926int main(){ int T; scanf("%d",&T); while(T--) { int digits,n; scanf("%d",&n);原创 2012-02-24 22:05:27 · 252 阅读 · 0 评论 -
二分匹配 Selecting Courses
#include #include #include #include #define MAX1 305#define MAX2 305int n,m,match[MAX2]; //二分图的两个集合分别含有n和m个元素。bool visit[MAX2],G[MAX1][MAX2]; //G存储邻接矩阵。bool DFS(int k){ int t;转载 2012-05-08 21:10:37 · 246 阅读 · 0 评论 -
树状数组模版
/* 这两天就把自己做过的题整理一下吧,比较悲剧的是题目的名字没有记录*/#include #include #include using namespace std;#define MAXN 32005int n,c[MAXN],num[MAXN],inx[MAXN],sorted[MAXN],xhash[MAXN];inline int lowbit(in原创 2012-05-08 21:06:59 · 271 阅读 · 0 评论 -
hdu Just a Hook
成段更新,注意延迟标记。#include #define maxn 100050#define lson l , m , rt *2 #define rson m+1 , r , rt *2 +1#define dem int m = (l + r) / 2int sum[maxn*4];int col[maxn*4];int n;void PushUp(int原创 2012-07-05 22:51:04 · 365 阅读 · 0 评论 -
2012 Multi-University Training Contest 1 Saving Princess claire(广搜)
广搜求最距离。一个细节:由于每个'P'之间是相通的,所以当搜到第一个'P’时,紧接着就应该把其他'P'点加入到队列中。#include #include #include #include #include #include #include using namespace std;#define maxn 2000int row,col,cost原创 2012-07-21 20:57:47 · 926 阅读 · 0 评论 -
母猪的故事
递推,注意前后向的联系#includeint main(){ int i,j,n,t; int f[25]; f[1]=1;f[2]=2;f[3]=3; for(i=4;i<=21;i++) f[i]=f[i-1]*2-f[i-3]; scanf("%d",&t); while(t--) { scanf("%d",&n);原创 2012-02-29 19:55:56 · 372 阅读 · 0 评论 -
How many ways??
递推先建图,后递推,和B题类似。#include#includeint map[25][25];int f[25][25];void solve(int num,int n){ int i,j,k,temp; for(i=2;i<=num;i++) { for(j=0;j<n;j++) { temp=0;原创 2012-02-29 19:51:42 · 336 阅读 · 0 评论 -
POJ 3157 And Then There Was One
约瑟夫环问题(数学方法)| n个人(编号1...n),先去掉第m个数,然后从m+1个开始报1,| 报到k的退出,剩下的人继续从1开始报数.求胜利者的编号.#include #include #includeint main(void){int n, k, m;while( scanf("%d%d%d", &n, &k, &m), n || k || m ){原创 2012-05-08 21:15:24 · 337 阅读 · 0 评论 -
Oil Deposits (广搜)
#include #include #include #include #include #include #include #define maxn 105int dx[8]={-1,-1,-1,0,0,1,1,1};int dy[8]={-1,0,1,-1,1,-1,0,1}; using namespace std; char map[maxn原创 2012-05-08 21:20:25 · 543 阅读 · 0 评论 -
仙人球的残影
水题#include#includeint main(){ int i,j,n; int str[50][50]; while(scanf("%d",&n)==1) { memset(str,0,sizeof(str)); int k=0; for(j=1;j<=n;j++) str[1][j]=j;原创 2012-02-29 19:42:20 · 655 阅读 · 0 评论 -
G题
"临流揽镜曳双魂 落红逐青裙 依稀往梦幻如真 泪湿千里云"在MCA山上,除了住着众多武林豪侠之外,还生活着一个低调的世外高人,他本名逐青裙,因为经常被人叫做"竹蜻蜓",终改名逐青,常年隐居于山中,不再见外人.根据山上附近居民所流传的说法,逐青有一个很奇怪的癖好,从他住进来那天开始,他就开始在他的院子周围种竹子,第1个月种1根竹子,第2个月种8根竹子,第3个月种27根竹子...第N个月就种(N^原创 2011-11-22 08:59:47 · 396 阅读 · 0 评论 -
hdu A 计划(深搜)
可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示原创 2012-05-15 13:15:13 · 2512 阅读 · 1 评论 -
不容易系列之(3)—— LELE的RPG难题(递推)
f[1]=3;f[2]=6;f[3]=6; i>3 时,假如i-1个格子填的颜色与第一个格子颜色不相同,那么我们填第i个格子时,只能填一种颜色,此颜色与第一个格子和i-1个格子的颜色都不相同,数量是f[i-1](因为这样前i-1个格子的颜色符合要求);假如i-1个格子填的颜色与第一个格子的颜色相同,那么我们填第i个格子时,可以就填两种颜色,数量是f[i-原创 2012-05-23 20:42:54 · 316 阅读 · 0 评论 -
Ignatius and the Princess III (递推)
整数划分问题是一个经典的递归问题。dp[n][m]表示 整数n的m划分为 n=x1+x2+x3+...+x;其中xi的最大值小于等于m;那么我们讨论一下怎么把问题转换为其子问题;1、当m=1或者n=1 时 显然dp[n][m]=1;2、当n3、当n=m时 分两种情况考虑 3.1、当划分的数中包含m时,dp[n][m]=1;3.2、当划分的数不包含m时,问题转换为整数n的原创 2012-06-19 20:46:14 · 363 阅读 · 0 评论 -
poj Buy Tickets (巧妙的线段树)
做完这道题才意识到什么是线段树的巧妙运用。yy才是王道啊!关键词:倒叙插入。#include #define maxn 200050#define lson l , m , rt * 2#define rson m+1 , r , rt * 2 + 1int n;int rest[maxn*4],ans[maxn];int id[maxn],value[maxn]; vo原创 2012-07-02 22:54:39 · 403 阅读 · 0 评论 -
Max Sum (简单dp)
#include #define inf 999999999int dp[100050],s[100050],pre[100050];int Max,start,end,n;void solve(){ int i,j; dp[1] = s[1]; pre[1] = 0; Max = s[1]; end = 1; for(i=2;i<=n;i++) { if(s[i] >原创 2012-07-11 22:12:23 · 276 阅读 · 0 评论 -
Common Subsequence (dp)
#include #include #define maxn 1050char a[maxn],b[maxn];int dp[maxn][maxn];int max(int x,int y){ return x > y ? x : y; }void solve(int x,int y){ int i,j; //memset(dp,0,sizeof(d原创 2012-07-12 21:58:23 · 239 阅读 · 0 评论 -
关于二分图问题的一些知识
二分图相关问题:1、二分图最大匹配 (定义:匹配是二分图中边的集合,且集合中的任意两条边没有公共点,包含边数最多的匹配就是最大匹配)2、二分图最小覆盖 (寻找一个点集,是的图中每一个边至少有一个点在该边上,即用最少的顶点去覆盖所有的边)3、二分图最大独立集 (寻找一个点集,其中任意两点在图中无对应边)4、二分图最小路径覆盖 (用尽量少的不相交简单路径覆盖有向无环图的所原创 2012-07-21 20:29:42 · 673 阅读 · 0 评论 -
hdu Air Raid(最小路径覆盖)
#include #include #define maxn 150int G[maxn][maxn];int mark[maxn];bool visit[maxn];int n,m;int path(int u){ int i; for(i=1;i<=n;i++) { if(G[u][i] && !visit[i]) { visit[i]=true; i原创 2012-07-21 20:35:31 · 348 阅读 · 0 评论 -
Argus 堆
此题解决了我对堆操作的两个疑惑:1、cmp()决定大根堆还是小根堆2、元素的add操作#include #include #define maxn 10005struct node{ int id; int Time;}in[maxn];node stack[maxn];int heaplength;int pere(int i){ return原创 2012-05-07 22:18:23 · 246 阅读 · 0 评论 -
Problem G --square (dfs+剪枝)
题意是给你一堆棍子。问你可不可以将他们组成正方形也就是可不可以平分成4份。用dfs,值得注意的是此题的剪枝问题,直接上代码,看注释吧。#include #include #include int s[25],sum,flag,n;bool visit[25];int cmp(const void *a,const void *b){ return *(int *原创 2012-06-24 16:19:50 · 417 阅读 · 0 评论 -
Monkey and Banana(dp)
#include#include#includestruct stu{ int x,y,z,h;}s[1000];int cmp1(const void*a,const void*b){ return *(int *)b-*(int *)a;}int cmp2(const void*a,const void*b){ struct stu *c,*d;原创 2012-07-12 22:05:07 · 344 阅读 · 0 评论