HDU
文章平均质量分 53
_夜风
我好懒怎么办
展开
-
hdu 1232
以前写的.....拿出来看看.... 并查集模板:#include #include using namespace std;int f[10000];int find(int x){ if(f[x]==0) return x; return f[x]=find(f[x]);}int bing(int a,int b){ i原创 2014-12-10 22:56:13 · 517 阅读 · 0 评论 -
hdu 2200
bc上的题目,很水,有很多方法做吧,题意大概就是给定你票数,然后让你求出票数最多的那个下标......之前我用两个for循环分开写,一个是读入,然后是判断,提交就wa,后来网上看了别人的,就是不能分开写,边读入边处理,开了下,感觉不是很明白....(/ □ \) AC代码:#include #include using namespace std;int a[1100]原创 2014-12-03 17:03:19 · 495 阅读 · 0 评论 -
hdu 2189
//hdu2189 题意大概就是给n个人,分成多组,要求每组人数都是素数,求有多少种。。。解法就是先把150以内的素数全部存入一个数组,然后利用a[j+b[i]]+=a[j];这道题一开始没理解这步后面把i做完一次循环的结果输出,然后对比下i全部做完循环的结果,原来这个也是隐藏的递归,解法真心想不出来。。。#include #include using namespace原创 2014-12-11 14:54:50 · 579 阅读 · 0 评论 -
今年暑假不AC
#include #include using namespace std;struct p{ int endd,start;};p p1[1000];bool cmp(p p1,p p2){ return p1.endd<p2.endd;}int main(){ int i,m,k,t; while(cin>>t原创 2014-12-11 13:15:01 · 451 阅读 · 0 评论 -
hdu 2106
#include #include #include using namespace std;int main(){ int sum,m,len,t,i,k,s; char a[1001]; while(cin>>t) { sum=0; while(t--) { cin>>a原创 2014-12-11 17:30:30 · 393 阅读 · 0 评论 -
hdu 2544
#include #include using namespace std;const int INF=0x3f3f3f3f;int dis[110][110];int main(){ int i,j,k,n,m,p,q,s; while(scanf("%d%d",&n,&m)!=EOF,n+m) { for (i=1;i<=原创 2014-12-11 17:34:32 · 353 阅读 · 0 评论 -
nyoj 2
#include #include #include #include using namespace std;char a[10001];int main(){ int i,t,flag,n; cin>>t; getchar(); stack s; while(t--) { cin.getl原创 2014-12-11 17:37:25 · 387 阅读 · 0 评论 -
hdu 2123
#include using namespace std;int main(){ int i,t,n,j,k,f; cin>>t; while(t--) { cin>>n; for(i=1,j=1;i<=n;cout<<endl,i++,j++) { //i=1;原创 2014-12-12 18:04:21 · 394 阅读 · 0 评论 -
hdu 2186
#include using namespace std;int main(){ int a,b,c,k1,k2,k3,m,n; cin>>m; while(m--){ k1=1;k2=1;k3=1; cin>>n; a=n/2;b=(n-a)*2/3;c=n-a-b; while(a/=10) k1原创 2014-12-12 18:01:34 · 410 阅读 · 0 评论 -
hdu 2104
#include using namespace std;int gcd(int a,int b){ return (b?gcd(b,a%b):a);}int main(){ int m,n; while(cin>>m>>n&&m+n!=-2) { if(gcd(m,n)==1) cout<<"YES\n";原创 2014-12-12 18:05:54 · 563 阅读 · 0 评论 -
一道找朋友的问题
以前写的.....贴出来,题目意思大概是找a,b两个人是否有关系... #include #include using namespace std;bool Find;int n,m,flag[30],M[30][30];void ss(int x,int y){ flag[x]=1; for(int i=0;i<=26;i++)原创 2014-12-10 22:53:26 · 657 阅读 · 0 评论 -
hdu 1869
#include using namespace std;int M[101][101];int main(){ int i,j,m,n,a,b,k; int flag; while(cin>>n>>m){ //flag=1; for(i=0;i<n;i++) for(j=0;j<n;j++)原创 2014-12-11 17:34:09 · 519 阅读 · 0 评论 -
hdu 2111
#include #include using namespace std;struct money{ int s; int v;};bool cmp(money a,money b){ return a.s>b.s;}int main(){ money M[101]; int n,m,i; while(cin>>n&&n) {原创 2014-12-11 17:28:54 · 451 阅读 · 0 评论 -
hdu 1728
//hdu 1728//这个是一道很经典的迷宫题了,思路感觉。。。取起点和终点,判断连线是否超过n个弯,//先是从起点出发,上下左右四个方向搜索,找到一条路,把那条路的第一个点压入队列//然后沿着那个方向一直搜下去,直到不符合条件(4个方向都动不了),就从队列里面去首元素//然后不断循环这个操作。。。。 #include #include #include原创 2014-12-11 12:39:34 · 478 阅读 · 0 评论 -
hdu 1022
// hdu1022这题算是我做的第一道栈的题目,之前看过栈的一些内容,做这道题的时候,可以模拟出过程,但是具体的代码不会写。。。所以决定练习一些栈和队列的问题,大概思路就是有三个数组和一个栈,先把第一个数组的第一个元素放进栈里,每次判断第二个数组和栈顶元素是否相等,如果相等就弹出,如果不相等就压入,大概就是这个思路。。。。 #include #include using原创 2014-12-11 13:08:31 · 575 阅读 · 0 评论 -
hdu 1870
水题。。。。AC代码:#include #include using namespace std;int main(){ char str[1010]; int i,k; while(scanf("%s",&str)!=EOF) { queueq; for(i=0;str[i]!='B';i++) { if(str[i]=='(') q.p原创 2014-12-10 11:57:43 · 392 阅读 · 0 评论 -
N!水题
//题目是求N!的问题,思路:设定一个整形数组来存放每次计算过后的值有两个for循环,第一个for循环每次加进一个数然后在第二个for循环里面计算出此时的阶乘,比如9999,先给出i=2在第二个for循环里面计算出2的阶乘,保存在数组里,然后i=3,在计算3的阶乘,后面以此类推。。。#include#include #include#include#define N原创 2014-12-11 12:38:24 · 451 阅读 · 0 评论 -
hdu 1087
hdu 1087这道题是用dp做出来的,也算是很巧妙的方法。。。。思路:首先第一个for遍历1-n,这个时候先设一个flag=0然后在遍历从1到i,因为题目求得是单调最长序列的和所以j每次都要在i前面,然后在满足啊a[i]>a[j]的情况下用flag记下j前面序列和的最大值,在遍历完j后此时flag存储了1-j中最大的sum和,此时,只要一步把a[i]加上,就可以表示s原创 2014-12-11 14:54:34 · 482 阅读 · 0 评论 -
hdu 2544
#include #include #define INF 9999999//#define INF 0x3f3f3f3using namespace std;int vis[200],dis[200],Map[200][200];int dijkstra(int n,int x){ int i,j,p,Min; for(i=1;i<=n;i++)原创 2014-12-11 17:36:06 · 400 阅读 · 0 评论 -
题目忘了..
#include using namespace std;int prime(int a){ int i; for(i=2;i*i<=a;i++) if(a%i==0) return 1; return 0;}int main(){ int i,m,n,p,q,t; while(cin>>原创 2014-12-11 17:38:33 · 434 阅读 · 0 评论 -
题目忘了
#include #include #include #define LL __int64using namespace std;bool ss(LL a){ LL i; for(i=2;i*i<=a;i++) { if(a%i==0) return true; } return原创 2014-12-11 17:40:08 · 377 阅读 · 0 评论 -
题目忘了
#include #include #include using namespace std;int cmp(int a,int b){ return a>b;}int main(){ int i,t,a[10010]; cin>>t; for(i=0;i<t;i++) cin>>a[i]; sor原创 2014-12-11 17:41:24 · 395 阅读 · 0 评论 -
hdu 2191
#include #include using namespace std;struct race{ double p,h,c,flag;};race r[101];bool cmp(race a,race b){ //if() return a.flag<b.flag;}int main(){ int i,t,m原创 2014-12-11 17:51:50 · 532 阅读 · 0 评论 -
hdu 2156
#include #include using namespace std;int main(){ int i,n; while(cin>>n&&n) { double sum=0; sum+=n*1.00; for(i=2;i<=n;i++) sum+=1.00/i*(n-i+1)*2; printf("%.2lf\n",sum);原创 2014-12-12 18:07:34 · 556 阅读 · 0 评论 -
hdu 2105
#include #include using namespace std;int main(){ double a,b,c,d,e,f,t; while(cin>>t){ if(t==0) break; else { while(t--) { cin>>a>>b>>c>>d>>e>>f原创 2014-12-11 17:45:29 · 452 阅读 · 0 评论 -
2015 Multi-University Training Contest 1 题解 BY FZUw
题目链接:5288-5299HDU5288题解原文链接:我是链接原创 2015-07-21 22:05:06 · 396 阅读 · 0 评论 -
HDU5289
题意:求解存在最大差值小于给定K值的所有区间段。输入:T(测试数据)n(数组个数)K(给定区间值的范围)ai...(数组值)输出:ss(所有满足符合条件的区间段)思路:二分+ST算法,首先利用ST算法初始化数组,找出区间段最大与最小值,然后直接二分查询数组,并判断给定区间最值是否满足小于K的情况,所以在遍历完一次数组后,可以累加得到符合条件的所有区间原创 2015-07-22 00:57:46 · 904 阅读 · 0 评论 -
HDU5339
题意:给你数a和数组b,然后用a模b中的数,求至少模多少个才能使a==0思路:直接模拟吧,首先排序,因为模最大的符合(比如2,3,6)然后遍历b,去模其他的所有数,直到为0,标记退出,否则继续遍历b,循环操作。#include#include#include#include#define INF 999999999using namespace std;bool c原创 2015-08-02 13:35:58 · 738 阅读 · 5 评论 -
HDU3415
题意:给一串数,求解最大连续子序列和。思路:和HDU1003一样,增加了两个条件,所取的区间长度必须在K范围内,另外这是一个循环数组,所以考虑可以用单调队列来做,另外可以直接循环数组操作,和1003差不多。#include #include #include #define N 200050using namespace std;int S[N],q[N];int MA原创 2015-08-02 14:57:29 · 654 阅读 · 0 评论 -
HDU3480
题意:给你n个数,然后让你分成m个集合,每个集合有一个值(最大值减最小值,然后平方),求整个集合的可能最小值。思路:因为每个集合里的值只和最大和最小值有关,所以很容易想到先排序,然后用DP可求得解,状态转移方程dp[i][j] = min(dp[i][j] , dp[k][j - 1] + (a[i] - a[k + 1]) ^ 2),j表示数组的下标,i表示集合数,dp为最小值,但是因为原创 2015-08-02 16:27:17 · 667 阅读 · 0 评论 -
2015 Multi-University Training Contest 5
#include //1002#include#includeusing namespace std;const int maxn=500000+10;typedef long long ll;int a[maxn];int main(){ int n,z,l; ll m; int t; scanf("%d",&t); while(t--)原创 2015-08-04 14:25:58 · 524 阅读 · 0 评论 -
2015 Multi-University Training Contest 2
附上第二场比赛的链接 从5300-5309 我是链接顺便贴出官方题解:原创 2015-07-24 12:12:18 · 343 阅读 · 0 评论 -
HDU5303
题意:给定一个环形道路长度为L,以及环形道路下标为0处为起始点,在环形道路上距离起始点Xi位置种植一颗苹果树,该树有a个苹果,篮子的最大容量为K,那么求摘完全部苹果所需的最短距离。思路:之前没想出来,根据官方题解,大致就是分成两个阶段来求,首先,按照普通情况下,肯定是每次都取离自己最短的苹果,这样因为要避免绕过半圈后的多余路径,就是分成两个半圈来走,分别贪心左右半圈,然后可能存在最后剩下的原创 2015-07-24 12:05:17 · 928 阅读 · 0 评论 -
HDU5301
题意:给n*m的矩形区域,剔除其中1*1的方块,然后用不同矩形块填充整个矩形区域,求需要的矩形块最大面积的最小值。思路:先判把矩形矫正,然后特殊处理边值为奇数,且在中心点的情况,最后处理障碍在其他位置,这个时候要分别枚举障碍周围四个方块对应最外面窗户,正好有三个方向,所以取其中的最小值即可。#include #include #include using namespace原创 2015-07-24 21:28:09 · 555 阅读 · 0 评论 -
HDU5327
#include #include #include using namespace std;int ss(int m,int n){ int ans=0,flag,a[10]; for(int h=m; h<=n; h++) { int s = h; memset(a,0,sizeof(a)); flag=0;原创 2015-07-30 16:00:32 · 681 阅读 · 7 评论 -
HDU3757
题意:一些团队因为任务要去避难所,并且每个避难所必须要有团队在,避难所的数量小于等于团队的数量,团队去避难所的消耗油量与路程成正比,求解最小耗油量。题目来源:2010 Northeastern European Regional Contest输入:T(示例)n(团队个数)a,b,c...(团队坐标,无序排列)m(避难所个数)a1,b1,c1...(避难所坐标,原创 2015-07-18 16:06:11 · 548 阅读 · 0 评论 -
HDU3756
题意:给定三围空间里面某些点,求构造出一个棱锥,将所有点包含,并且棱锥的体积最小。输入:T(测试数据组数)n(给定点的个数)a,b,c(对应xyz坐标值)...输出:H(构造棱锥的高)R(构造棱锥的半径)思路:简单的一次求导极值问题,首先将三围虚拟化成二维,可以这样想,以棱锥的高为三角形的高,棱锥的里面半径为三角形的底边,原创 2015-07-18 18:53:32 · 437 阅读 · 0 评论 -
hdu 2037
#include #include using namespace std;struct p{ int endd,start;};p p1[1000];bool cmp(p p1,p p2){ return p1.endd<p2.endd;}int main(){ int i,m,k,t; while(cin>>t原创 2014-12-11 17:50:01 · 416 阅读 · 0 评论 -
一道电梯的问题
#include #include using namespace std;int main(){ int i,c,n,a[101]; cin>>c; while(c--) { cin>>n; int k=0,flag=0; for(i=0;i<n;i++) ci原创 2014-12-12 17:55:45 · 439 阅读 · 0 评论 -
HDU 1005
#includeusing namespace std;int main(){ int i,flag,A,B,n; int f[55]; while(scanf("%d%d%d",&A,&B,&n),A||B||n) { f[1] = f[2] = 1; for(i=3;i<51;i++) { f[i]=(A*f[i-1]+B*f[i-2])%原创 2015-03-11 10:05:28 · 560 阅读 · 0 评论