• 第37届ACM/ICPC 金华赛区现场赛最水四道题 HDU 4442 Physical Examination HDU 4450 Draw Something HDU 4451 Dressing HDU 4452 Running Rabbits


    HDU 4442 Physical Examination

    2012年金华赛区现场赛A题。

    水题,排序后解决。

    对于两个 a1,b1 和a2,b2;

    先1后2:a1+a2+a1*b2

    先2后1: a1+a2+b1*a2;

    1排在2前面的条件就是: a1*b2<b1*a2.

    所以按照这个条件排序,然后出结果就可以了。

    代码实现主要是要处理,会超出int的,最好用long long,或者乘之前强制转换下。

    代码:

    HDU 4442
    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    const int MAXN=100010;
    const int MOD=365*24*60*60;
    struct Node
    {
        int a,b;
    }node[MAXN];
    
    bool cmp(Node a,Node b)
    {
        return (long long)a.a*b.b<(long long)b.a*a.b;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)==1 && n)
        {
            for(int i=0;i<n;i++)
              scanf("%d%d",&node[i].a,&node[i].b);
            sort(node,node+n,cmp);
            long long ans=0;
            long long t=0;
            for(int i=0;i<n;i++)
            {
                ans+=(node[i].a+t*node[i].b)%MOD;
                ans%=MOD;
                t+=(node[i].a+t*node[i].b)%MOD;
                t%=MOD;
            }
            printf("%I64d\n",ans);
        }
        return 0;
    }

    HDU 4450  Draw Something

    2012年金华赛区I题

    这题就不解释了,签到题。求n个数的平方和

    区域赛出的这么水,有意思么。。。基本上全部1A了。

    HDU 4450
    #include<stdio.h>
    #include<algorithm>
    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
        int n;
        int a;
        while(scanf("%d",&n)==1&&n)
        {
            int ans=0;
            while(n--)
            {
                scanf("%d",&a);
                ans+=a*a;
            }
            printf("%d\n",ans);
        }
        return 0;
    }

    HDU 4451 Dressing

    2012年金华赛区J题

    水题一枚。

    就是有N件衣服,M件裤子,K件鞋子。

    有一些衣服和裤子是搭配不和谐的,有一些裤子和鞋子是搭配不和谐的。

    问有多少种搭配衣服+裤子+鞋子,使得不存在不和谐的。

    很简单,不要想得太多。

    最直接的方法是枚举每一件组合,找出符合的,复杂度O(N*M*K),这个肯定是超时的。。。

    可以降低一维。

    枚举每一件衣服和裤子的组合,如果衣服和裤子可以搭配,则看该条裤子可以和多少件鞋子搭配。累加就可以了。

    这个的复杂度是O(N*M).这个对于这题已经可以AC了,虽然效率没有很高。

    还可以再降低一维。

    枚举每条裤子,可以和这条裤子搭配的衣服数乘以可以和这条衣服搭配的鞋子数。累加起来就是答案。

    复杂度O(M).

    代码,按照第二种思路写的。

    HDU 4451
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    const int MAXN=1010;
    int a[MAXN][MAXN],b[MAXN][MAXN];
    int c[MAXN];
    int main()
    {
        int N,M,K;
        int P;
        char str1[20],str2[20];
        int t1,t2;
        while(scanf("%d%d%d",&N,&M,&K)==3)
        {
            if(N==0&&M==0&&K==0)break;
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            memset(c,0,sizeof(c));
            scanf("%d",&P);
            while(P--)
            {
                scanf("%s%d%s%d",&str1,&t1,&str2,&t2);
                if(strcmp(str1,"clothes")==0)
                {
                    a[t1][t2]=1;
                }
                else
                {
                    if(b[t1][t2]==0)
                    {
                        b[t1][t2]=1;
                        c[t1]++;
                    }
                }
            }
            int ans=0;
            for(int i=1;i<=N;i++)
              for(int j=1;j<=M;j++)
                if(a[i][j]==0)
                  ans+=(K-c[j]);
            printf("%d\n",ans);
        }
        return 0;
    }

    HDU 4452   Running Rabbits

    2012年金华赛区K题

    简单模拟,一秒一秒模拟过去就可以了。

    注意0秒时不要左转。还有,假如相撞了,交换方向,不左转了。

    HDU 4452
    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int n;
    int x1,y1;
    int x2,y2;
    int dir1,dir2;//0北,1西,2南,3东
    int s1,t1;
    int s2,t2;
    
    void action(int t)
    {
        if(x1==x2&&y1==y2)swap(dir1,dir2);
        else
        {
            if(t!=0 && t%t1==0){dir1+=1;dir1%=4;}
            if(t!=0 && t%t2==0){dir2+=1;dir2%=4;}
        }
    
        for(int i=0;i<s1;i++)
        {
            if(dir1==0&&x1==1)dir1+=2,dir1%=4;
            if(dir1==1&&y1==1)dir1+=2,dir1%=4;
            if(dir1==2&&x1==n)dir1+=2,dir1%=4;
            if(dir1==3&&y1==n)dir1+=2,dir1%=4;
    
            if(dir1==0)x1--;
            else if(dir1==1)y1--;
            else if(dir1==2)x1++;
            else y1++;
        }
    
        for(int i=0;i<s2;i++)
        {
            if(dir2==0&&x2==1)dir2+=2,dir2%=4;
            if(dir2==1&&y2==1)dir2+=2,dir2%=4;
            if(dir2==2&&x2==n)dir2+=2,dir2%=4;
            if(dir2==3&&y2==n)dir2+=2,dir2%=4;
    
            if(dir2==0)x2--;
            else if(dir2==1)y2--;
            else if(dir2==2)x2++;
            else y2++;
        }
        //printf("%d %d  %d  %d\n",x1,y1,x2,y2);
    }
    
    int main()
    {
        char str1[10],str2[10];
        while(scanf("%d",&n)==1 && n)
        {
            scanf("%s%d%d",&str1,&s1,&t1);
            scanf("%s%d%d",&str2,&s2,&t2);
            x1=1,y1=1;
            x2=n,y2=n;
            if(str1[0]=='N')dir1=0;
            else if(str1[0]=='W') dir1=1;
            else if(str1[0]=='S') dir1=2;
            else dir1=3;
    
            if(str2[0]=='N')dir2=0;
            else if(str2[0]=='W') dir2=1;
            else if(str2[0]=='S') dir2=2;
            else dir2=3;
    
            int K;
            scanf("%d",&K);
            for(int i=0;i<K;i++)action(i);
            printf("%d %d\n%d %d\n",x1,y1,x2,y2);
        }
        return 0;
    }
    人一我百!人十我万!永不放弃~~~怀着自信的心,去追逐梦想
  • 相关阅读:
    Windows环境下阿里云添加SSH Key及Git配置Key
    Shiro自定义注解扩展@SalmonRequiresPermission
    windows下安装redis
    模型-视图-控制器的C++解释
    CentOS 7 搭建 GitLab
    博客园主题分享——绿色
    2019年的第一篇博客
    Qt——线程与定时器
    Qt——线程类QThread
    QML——添加自定义模块
  • 原文地址:https://www.cnblogs.com/kuangbin/p/2745368.html
Copyright © 2020-2023  润新知