zoukankan      html  css  js  c++  java
  • 第二届腾讯编程马拉松初赛第一场。。hdu4505 hdu4506 hdu4507 hdu4508 hdu4509(未完,4507)



    //1001


    点击打开链接

    //刚开始人全部上在电梯上。。要排下序。。。


    #include"stdio.h"
    #include"stdlib.h"
    struct node
    {
    	int x;
    }a[101];
    int cmp(const void*a,const void*b)
    {
    	return (*(struct node*)a).x-(*(struct node*)b).x;
    }
    int main()
    {
    	int ans,t,n,b,i;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		
    		for(i=0;i<n;i++)
    			scanf("%d",&a[i].x);
    		qsort(a,n,sizeof(a[0]),cmp);
    		b=0;ans=0;
    		for(i=0;i<n;i++)
    		{
    			if(a[i].x==b)ans++;
    			else if(a[i].x>b)ans+=(a[i].x-b)*6+5+1;
    			else ans+=(b-a[i].x)*4+5+1;
    			b=a[i].x;
    		}
    		ans+=b*4;
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    





    //1002

    点击打开链接

    这道题学了:个东西::快速幂取余

    #include"stdio.h"
    __int64 fun(__int64 a,__int64 b,__int64 c)//a的b次方对c求余
    {
    	__int64 ans=1;
    	a%=c;
    	while(b>0)
    	{
    		if(b%2==1)ans=(ans*a)%c;
    		b/=2;
    		a=(a*a)%c;
    	}
    	return ans;
    }
    int main()
    {
    	int n,i,T,b[10001];
    	__int64 t,k,a[10001],ans[10001];
    	scanf("%d",&T);
    	while(T--)
    	{
    		scanf("%d%I64d%I64d",&n,&t,&k);
    		for(i=0;i<n;i++)
    			scanf("%I64d",&a[i]);
    		k=fun(k,t,1000000007);//计算k的t次方对1000000007求余
    		if(k==0)k=1;
    		t=t%n;//.		
    		for(i=0;i<n;i++)
    		{
    			b[i]=i-t;//b[i]表示a[i]经过t次运算后的下标
    			if(b[i]<0)b[i]+=n;//可能为负
    			ans[i]=(a[b[i]]*k)%1000000007;
    		}
    		for(i=0;i<n-1;i++)
    			printf("%I64d ",ans[i]);
    		printf("%I64d\n",ans[i]);
    	}
    	return 0;
    }





    //1003






    //1004


    是完全背包..

    背包不一定要装满!!.



    #include"stdio.h"
    #include"string.h"
    #define max(x,y) x>y?x:y;
    int dp[100001];
    int main()
    {
        int n,m,a[101],b[101];
        int i,j;
        while(scanf("%d",&n)!=-1)
        {
            for(i=0;i<n;i++)
                scanf("%d%d",&a[i],&b[i]);
            scanf("%d",&m);
            memset(dp,0,sizeof(dp));
            for(i=0;i<n;i++)
            {
                for(j=b[i];j<=m;j++)//不一定装满
                {
                    dp[j]=max(dp[j],dp[j-b[i]]+a[i]);
                }
            }
            printf("%d\n",dp[m]);
        }
        return 0;
    }





    //1005


    线段树的题。但是可以不用模版。。。。

    12:00-12:01只标记12:00,代表第12*60分钟被使用..

    点击打开链接



    #include"stdio.h"
    #include"string.h"
    int mark[1441];
    void fun(char str[])
    {
    	int a,b,c,d;
    	a=(str[0]-'0')*10+str[1]-'0';
    	b=(str[3]-'0')*10+str[4]-'0';
    	c=(str[6]-'0')*10+str[7]-'0';
    	d=(str[9]-'0')*10+str[10]-'0';
    	a=a*60+b;
    	b=c*60+d;
    	for(;a<b;a++)
    		mark[a]=1;//如果时间是12:00-12:01标记12:00;mark[i]表示第i分钟被占用....
    }
    int main()
    {
    	int n,i,sum;
    	char str[12];
    	while(scanf("%d",&n)!=-1)
    	{
    		getchar();
    		memset(mark,0,sizeof(mark));
    		for(i=0;i<n;i++)
    		{
    			gets(str);
    			fun(str);
    		}
    		sum=0;
    		for(i=0;i<1440;i++)
    			if(mark[i]==0)sum++;
    		printf("%d\n",sum);
    	}
    	return 0;
    }
    



  • 相关阅读:
    java微信扫码支付(模式二)
    Python学习08
    学习java第12天
    学习java第11天
    学习java第十天
    学习Java第九天
    学习Java第八天
    学习Java第六天
    学习Java第六天
    学习Java第五天
  • 原文地址:https://www.cnblogs.com/yyf573462811/p/6365141.html
Copyright © 2011-2022 走看看