HDU11页

HDU2015
偶数求和

HDU2018

cow(n-1)+cow(n-3)

HDU2022

#include <stdio.h>
 int main(void)
{
    int n, m;
     while(scanf("%d%d", &n, &m) != EOF)
        {
        int sum=0, ai=2, count=0, i;
        for(i=1; i<=n; i++)
        {
            sum += ai;
            ai += 2;     
            if( i % m == 0)
             {
                count++;
                if(count != 1)
                    printf(" ");
                printf("%d", sum / m);
                sum = 0;
            }
        }
        if(n % m == 0)
            printf("\n");
        else
            printf(" %d\n", sum / (n % m));/*超出的部分*/
        }
    }

HDU2024

     getchar() 用来吃空格

HDU2030

汉字占俩个字符,并且码小于0
注意getchar吃换行。

HDU2036

利用多边形(n边形)面积计算公式:
S=0.5 * ( (x0*y1-x1*y0) + (x1*y2-x2*y1) + ... + (xn*y0-x0*yn) ),
其中点(x0,y0), (x1, y1), ... , 
(xn,,yn)为多边形上按逆时针顺序的顶点((x0,y0)与(xn,yn)为同一点)。

HDU2039

注意用float

HDU2043

    if(n>16||n<8)
    char a[100]={'~','!','@','#','$','%','^'};
        for(int i=0;i<n;i++)
        {
            if(s[i]<='Z'&&s[i]>='A')
                f=1;
        }
        sum+=f; f=0;

HDU2045

F[N]=F[N-1]+2*F[N-2]

HDU2047

    1    最后一个字符是O: 
    前面n-1个位置有2*M(n-2)种可能。而第n个位置此时是’O’,所以此时共有2*  M(n-2)种可能; 
    2    最后一个字符不是 O: 
n-1个位置有M(n-1)种可能,而第n个位置有两种可能,所以此时共有2*M(n-2)种可能
    综上可知,本题的递推关系为:M(n)=2*[M(n-1)+M(n-2)]

HDU2049

s[i]=(i-1)*(s[i-1]+s[i-2])
2064&2049 
  Cnm*f(m);

HDU2050
线面问题

   直线分平面             f(n)=f(n-1)+n      
                         n(n+1)/2+1
   折线分平面
                         f(n)=f(n-1)+4(n-1)+2-1
                         2n^2-n+1
   封闭曲线分平面问题
                         f(n)=f(n-1)+2(n-1)
                          =n^2-n+2
   平面分割空间问题(hdu1290)
                          (n^3+5n)/6+1

HDU2052

多加一个换行

HDU2053

做这种规律题要打表找规律
第一种方法可以通过-1和1为标志方便变换
也可以将1 4 9也就是1 2 3的平方赋值

HDU2054

换种问法 就是0与0.000是相同的
把点赋值为‘\0’

HDU2055

用的map函数 map<char,int> s符合映射关系
map要写在 using namespace std;下或者主函数里
s本身就是一个数组

HDU2058 连续序列和

    假设首项是1,我们代入m=a1*n+n*(n-1)/2,则有n(n+1)=2m(n是项数的个数)。
    所以有n*(n+1)=2m>n*n,即n<sqrt(2m); 也就是说项数最多的情况也只有sqrt(2m)。
     (以上的'n'不是题目中的n,以上的'm'为题目中的m)
     
    那么我们枚举1---sqrt(2m),枚举的是项数的个数(即数列区间长度); 
    m知道了,长度知道了,那么可以解出首项;(即解方程m=a1*n+n*(n-1)/2;)
    for(i=int(sqrt(2*m));i>0;i--)
  {
   sum=m-i*(i-1)/2;
   if(sum%i==0)
   {
    printf("[%d,%d]\n",sum/i,sum/i+i-1);
   }
  }

HDU2064

汉诺塔

有俩种算法          3f(n-1)+2;
                   3的n次幂减1;(不能用pow,精度有问题)

HDU2069

dp[0][0]=1;    
for(int i=0;i<5;i++)
      for(int k=1;k<=100;k++)       
         for(int j=a[i];j<=n;j++)
              dp[j][k]+=dp[j-a[i]][k-1]; 
              也可以用暴力的方法,不用计算1分的情况

HDU2072

  map函数的用法

HDU2077
汉诺塔三 F(n)=f(n-1)+2;

int ans=1
   n--;
while(n--)
   ans*=3;
cout<<ans-1+2<<endl;

HDU2085

        a[i]=3*a[i-1]+2*b[i-1];
        b[i]=a[i-1]+b[i-1];

HDU2087

kmp水题
#include <cstdio>
#include <cstring>
const int MAXN = 1010;
char T[MAXN], P[MAXN];
int f[MAXN];
 void getVal(int l) {
	int i = 0, j = -1;
	f[0] = -1;
	while (i < l) {
		if (j == -1 || P[i] == P[j]) {
			i++;
			j++;
			f[i] = j;
		} else
			j = f[j];
	}
}
int kmp() 
{
	int i=0,j=0,ans=0;
	int lt=strlen(T),lp=strlen(P);
	getVal(lp);
	while(i<lt) 
        {
		if (j == -1 || T[i] == P[j]) {
			i++;
			j++;
		} else
			j = f[j];
		if (j == lp) {
			ans++;
			j = 0;
		}
	}
	printf("%d\n", ans);
}
 
int main() {
	while (scanf("%s%s", T, P) == 2) {
		kmp();
	}
	return 0;
}

HDU2082

dp[0][0]=1

HDU2088

输出样列间有换行
int f=0;
if(f) cout<<endl;
.
.
.
f=1;

HDU2094
拓扑排序

 #include<cstdio>
 #include<iostream>
#include<cstring>
#include<map>
using namespace std;
#define MAXN 1010
int edge[MAXN][MAXN];
int ind[MAXN];
bool solve(int t)
{
    int num=0;
    for(int i=1;i<=t;i++)
       if(ind[i]==0) num++;
    if(num==1) return true;
     return false;
}
int main()
{
    int n;
    map<string,int> name;
    while(scanf("%d",&n)&&n)
    {
        name.clear();
        memset(edge,0,sizeof(edge));
        memset(ind,0,sizeof(ind));
         int t=1;
        char a[100],b[100];
        for(int i=1;i<=n;i++)
        {
            scanf("%s%s",a,b);
            if(!name[a]) name[a]=t++;
            if(!name[b]) name[b]=t++;
            edge[name[a]][name[b]]=1;
            ind[name[b]]++;
        }
        t--;
        if(solve(t)) puts("Yes");
        else puts("No");
    }
    return 0;
}

HDU2095

    异或
     a^a=0, 
     0^a=a

HDU2098

打表
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值