摘要: 猜年龄结果 :10 1 #include 2 using namespace std; 3 4 int main() 5 { 6 int a,b; 7 for(a=1 ; ; a++) 8 { 9 for(b=a+1 ; b 2 using namespace std; 3 4 int main() 5 { 6 int ans = 2; 7 for(int i=1 ; i 2 using namespace std; 3 4 int a[4]; 5 bool f[10]; 6 int ret; 7 8 //判断乘积中的数是不是刚好... 阅读全文
posted @ 2014-04-01 20:02 Cshhr 阅读(1363) 评论(0) 推荐(0) 编辑
摘要: Problem: http://poj.org/problem?id=3264求区间内最大值最小值的差minv[]维护最小值maxv[]维护最大值 1 #include 2 #include 3 using namespace std; 4 5 #define lson l , m , rt> 1;29 build(lson);30 build(rson);31 pushup(rt);32 }33 34 35 void query(int L,int R,int l,int r,int rt)36 {37 if(L> 1;45 if(L m)... 阅读全文
posted @ 2014-03-15 14:54 Cshhr 阅读(295) 评论(0) 推荐(0) 编辑
摘要: Segment Tree(TYVJ P1038)没有更新的区间最值查询,够小(简单)了吧 1 #include 2 #include 3 using namespace std; 4 #define MAXM 100000 5 #define lson l , m , rt> 1;24 build(lson);25 build(rson);26 pushup(rt);27 }28 29 30 int query(int L,int R,int l,int r,int rt)31 {32 if(L> 1;34 int ret = 2e9;35 if... 阅读全文
posted @ 2014-03-12 15:36 Cshhr 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 欢迎评论指出错误,提出疑问,或者不介意给出更好的解法,有交流才有进步。PREV-3(带分数)这道题就简单的求1-9九个数组成的带分数来表示数值n的个数枚举1-9九个数组成的全排列,然后把每种排列分成整数、分子、分母三段然后简单判断以下每个带分数是否和n相等这里的剪枝在于枚举整数、分子、分母分别的位数分母的位数肯定小于等于分子的位数整数的位数肯定小于等于n的位数 Code 1 #include 2 3 int n,a[10],ans,len; 4 bool f[10];//标记是否已加入排列中 5 6 //计算a[]中从第s位起长l位的整数大小 7 int getNum(int s,int... 阅读全文
posted @ 2014-03-06 12:53 Cshhr 阅读(3870) 评论(0) 推荐(0) 编辑
摘要: Problem: http://acm.hdu.edu.cn/showproblem.php?pid=1384在每个区间[ai,bi]上至少选ci个元素组成集合Z,求Z最小时的元素个数因为是求最小,所以差分约束转化为SPFA求最长路每个ai,bi,ci转换成点ai指向点bi+1的边,边权为ci求出最小的ai,Min,最大的bi,Max加上(Max-Min+2)*2条有向边x->x+1(边权为0)x+1->x(边权为-1) x属于[Min,Max]最后套上SPFA模版妥妥的#include#include#include#includeusing namespace std;#def 阅读全文
posted @ 2014-02-15 01:15 Cshhr 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 已攻克43道,持续更新(有我没过,你们过了的,求共享思路)...BEGIN-1(A+B问题)#includeint main(){ int a,b;//-10000 int main(){ long long n,sum;//nconst double PI=3.1415926535897932;int main(){ double r;//虽说输入是一个整数,但后面都是要转换成实数的 scanf("%lf",&r);//scanf(),printf()的double型输入输出 printf("%.7lf\n",PI*r*r); return 0 阅读全文
posted @ 2014-02-14 20:57 Cshhr 阅读(10554) 评论(2) 推荐(4) 编辑
摘要: Problem: http://acm.hdu.edu.cn/showproblem.php?pid=3549题目都直接说求最大流了,还需要做什么数据这么弱,直接套最大流模版#include#include#include#includeusing namespace std;#define MAXN 16int map[MAXN][MAXN],n,m,ans,pre[MAXN];//map[][]邻接矩阵存图,pre[]前驱数组 bool EK_BFS(int start,int end){//宽搜寻增广路 queue que; bool flag[MAXN];//标记点是否被... 阅读全文
posted @ 2014-02-14 20:38 Cshhr 阅读(613) 评论(0) 推荐(0) 编辑
摘要: Problem: http://acm.hdu.edu.cn/showproblem.php?pid=2544求商店到赛场最短时间赤裸裸的单源最短路径直接套最慢的邻接矩阵Dijkstra模版都0ms过#include#include#includeusing namespace std;#define MAXN 110#define INF 1000000int n,m,Map[MAXN][MAXN],Dist[MAXN];//Map[][]存图 ,Dist[]存最短路长 void init(){ for(int i=1;iDist[k]+Map[k][j])Dist[j]=Dist[k... 阅读全文
posted @ 2014-02-12 19:56 Cshhr 阅读(347) 评论(0) 推荐(0) 编辑
摘要: Problem: http://poj.org/problem?id=1135求图中距离1点最远(包括点和边上的点)的距离先对所有点求单源(点1)最短路然后每条边上的点距离1点最远的距离必为边两端点到点1的最短距离和该边的长度 三者和的一半现在点到源(点1)的距离知道了 边到源(点1)的距离也知道了 只需要比较两者了#include#include#includeusing namespace std;#define MAXN 510#define MAXE 250010int n,m,size,head[MAXN],A[MAXE],B[MAXE],pre[MAXN];double C[MAX 阅读全文
posted @ 2014-02-11 21:35 Cshhr 阅读(699) 评论(0) 推荐(0) 编辑
摘要: Problem: http://acm.hdu.edu.cn/showproblem.php?pid=1257依次拦截导弹,如果当前存在的拦截系统无法拦截该导弹,增加一个拦截系统否则将当前拦截系统中 不小于该导弹高度的 最小高度的拦截系统的高度设置为该导弹的高度#includeint n,a,lj[10000]={0},ans;void work(){ int L=1,R=ans; while(Llj[ans])lj[++ans]=a;//增加一个新的拦截系统 else work(); } printf("%d\n",ans); ... 阅读全文
posted @ 2014-02-11 13:23 Cshhr 阅读(179) 评论(0) 推荐(0) 编辑
摘要: Problem: http://acm.hdu.edu.cn/showproblem.php?pid=1257因为导弹是依次发射的没发改变其发射循序直接贪心就好,每套拦截系统按循序拦截可拦截的导弹剩下未被拦截的导弹就形成了一个新的导弹发射序列#includeint main(){ int n,a[10000];//导弹高度 bool f[10000];//导弹是否被拦截 while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++){ scanf("%d",&a[i]); f[i]... 阅读全文
posted @ 2014-02-11 12:06 Cshhr 阅读(158) 评论(0) 推荐(0) 编辑
摘要: Problem: http://acm.hdu.edu.cn/showproblem.php?pid=4301长x的巧克力分成y块时,最末端的两小块巧克力可能是分在一块上 用DPh[x][y]表示,也可能分在两块上 用DPf[x][y]表示当求DPh[x+1][],DPf[x+1][]时,求可以通过前面的DPh[x][],DPf[x][]上来求值/*相同数字表示被分在一起 x -> x+1 0 00 01 00 01 01 0 -> 00 , 01 , 01 , 00 , 02块数;y y y+1 y+1 y+1 y+2 ... 阅读全文
posted @ 2014-02-11 11:31 Cshhr 阅读(211) 评论(0) 推荐(0) 编辑
摘要: Problem: http://acm.hdu.edu.cn/showproblem.php?pid=4221对所有任务按截止时间从小到大排序然后一次计算每个任务完成的时间 和超过截止的时间 取最大值#include#includeusing namespace std;#define MAXN 100010struct Task{ int c,d;}w[MAXN];bool cmp(Task a,Task b){ return a.d<b.d;}int main(){ int t,n; scanf("%d",&t); for(int k=1;k<=t; 阅读全文
posted @ 2014-02-10 22:56 Cshhr 阅读(363) 评论(0) 推荐(0) 编辑
摘要: Problem: http://acm.hdu.edu.cn/showproblem.php?pid=4223求连续子序列和的绝对值的最小值sum[i]储存前 i 个数的和sum[y]-sum[x]表示第x+1个数到第y个数的和该题要求的就是最小的abs(sum[y]-sum[x])#include#includeusing namespace std;#define MAXN 1001int t,n,a,sum[MAXN];int main(){ scanf("%d",&t); for(int k=1;k<=t;k++){ scanf("%d&qu 阅读全文
posted @ 2014-02-10 22:12 Cshhr 阅读(140) 评论(0) 推荐(0) 编辑
摘要: Problem: http://acm.hdu.edu.cn/showproblem.php?pid=4217给定1~n的n个数依次求第ki小的数 删除该数 再求剩下的数中第ki+1小的数 删除...求所有删除的数的和用树状数组bit[]:bit[k](这里的bit[k]不是bit[k]本身的值,详见代码中find(k))表示小于等于 k 的数的个数用二分搜索 搜索第ki大的数#includeconst int MAXN=270000;int bit[MAXN];int find(int k){//查找小于等于k的数的个数 int ret=0; while(k>0){ ... 阅读全文
posted @ 2014-02-10 21:02 Cshhr 阅读(257) 评论(0) 推荐(0) 编辑
摘要: Problem : http://acm.hdu.edu.cn/showproblem.php?pid=2899求函数f(x)在[0,100]上的最小值根据f'(x)在[0,100]上单调递增的性质,运用二分搜索求f'(x)在[0,100]上的零点#includedouble y;double f(double x){//f(x) double fx=6*x; fx=(fx+8)*x*x*x; fx=(fx+7)*x; fx=(fx+5)*x; return (fx-y)*x;}double df(double x){//f'(x) double fx=42... 阅读全文
posted @ 2014-02-10 18:43 Cshhr 阅读(165) 评论(0) 推荐(0) 编辑
摘要: Problem : http://acm.hdu.edu.cn/showproblem.php?pid=1312简单搜索,不多说了...#includeint w,h,ans=0;char g[20][25];bool f(int x,int y){ return (x>=0 && x=0 && y<w);}void dfs(int x,int y){ ans++; g[x][y]='#'; for(int dx=-1;dx<=1;dx++) for(int dy=-1;dy<=1;dy++) if(dx==0 ^ dy= 阅读全文
posted @ 2014-02-09 19:52 Cshhr 阅读(162) 评论(0) 推荐(0) 编辑
摘要: Problem : http://acm.hdu.edu.cn/showproblem.php?pid=1258dfs简单搜索题再简单不过了,只是关键的是同样的求和序列只能算一次感觉要来做判重处理会很难过...超无聊的人才会去判重因为1#includeusing namespace std;int t,n,k,ans,cou[20];struct Num{ int v,c;//v存数列中某个数的数值,c存该数的个数}a[20];bool cmp(Num x,Num y){ return x.v>y.v;}void put(){ int sum=0; for(int i=... 阅读全文
posted @ 2014-02-08 20:26 Cshhr 阅读(455) 评论(0) 推荐(0) 编辑
摘要: Problem from:http://acm.hdu.edu.cn/showproblem.php?pid=3276在一个数列中寻找两个不相交且不相邻长度为Len(x=0最后剩下的就是如何实现DP了:DP前,先用一个数组sum[],sum[i]存前 i 个数的 Ek假设DP[i-1]已实现,则DP[i]=max(DP[i-1] , max(sum[i]-sum[j] (xsum[i-x],是则弹出该s,直到队列为空或者不存在sum[s]>s[i-x] 再加入i-x然后判断双端队列首端的元素s,s是否#include#includeusing namespace std;const in 阅读全文
posted @ 2014-02-08 19:31 Cshhr 阅读(334) 评论(0) 推荐(0) 编辑
摘要: Problem from:http://acm.hdu.edu.cn/showproblem.php?pid=3274从government选取的villages中任意选一个village作为树的根节点,在树上深搜此题并不用把树生成出来,把每条边以两条边(双向)的方式存入图中在图中进行深搜(每个节点只遍历一次)#include#includeconst int MAXN=1010;int head[MAXN],n,m,t,s,ans;//s在输入被选择的点的时候用,在开始深搜时,s存储的是最后一个被选择的点(作为树的根节点)bool cho[MAXN],vis[MAXN];//cho[]标记是 阅读全文
posted @ 2014-02-06 19:20 Cshhr 阅读(283) 评论(0) 推荐(0) 编辑