zoukankan      html  css  js  c++  java
  • 2013 ACM/ICPC Asia Regional Online —— Warmup

    题目链接  2013 ACM/ICPC Asia Regional Online —— Warmup

    hdu4706

    Children's Day

    就是循环使用a-z来输出一个反N

    思路:直接模拟,采用一个数组来保存,数组中保存0-25的数字(字母出现的地方保存数字)(其他初始化为负数)

    输出时,直接输出数组中的数字+‘a’ 负数输出空格

    代码:

    #include <stdio.h>
    #include <string.h>
    
    int a[12][12];
    
    int main()
    {
        /*freopen("1.txt","w",stdout);*/
        int t = 0;
        int n = 3,i,j,k;
        for(i = n; i <= 10; i++)
            {
               for(j = 0; j <=i; j++)
                for(k = 0; k <= i; k++)
                    a[j][k] = -1;
                for(j = 1; j <= i; j++)
                     {
                         t %= 26;
                         a[j][1] = t;
                         ++t;
                     }
                    j = i-1,k = 2;
            while(1)
            {
                t %= 26;
                a[j][k] = t;
                j--;k++;
                 ++t;
                if(j == 1) break;
    
            }
            for(j = 1; j <= i; j++)
                {
                    t %= 26;
                    a[j][i] = t;
                    ++t;
                }
        for(j = 1; j <= i; j++)
            {
                for(k = 1; k <= i;k++)
                if(a[j][k] != -1)
                {
    
                    printf("%c",'a'+a[j][k]);
                }
                else
                printf(" ");
                printf("
    ");
            }
            }
        return 0;
    }
    

    hdu 4707 Pet

    使用并查集来做,以0为根节点,记录点到0的距离,大于d 则+1

    代码:

    #include <stdio.h>
    #include <string.h>
    
    #define N 100007
    
    int f[N];
    int time[N];
    int t = 0;
    
    int find_f(int x)
    {
        if(f[x] == x) return x;
        else return  find_f(f[x]);
    }
    
    void add(int x,int y,int d)
    {
        time[y] = time[x] + 1;
        if(time[y] > d)
            {
                t++;
            }
        int fx = find_f(x);
        int fy = find_f(y);
        f[fy] = fx;
    }
    int main()
    {
        int T,n,d,i,j,x,y;
        scanf("%d",&T);
        while(T--)
        {
            t = 0;
            memset(time,0,sizeof(time));
            scanf("%d%d",&n,&d);
            for(i = 0; i <= n; i++)
                f[i] = i;
            for(i = 1; i< n; i++)
                {
                    scanf("%d%d",&x,&y);
                    add(x,y,d);
                }
                printf("%d
    ",t);
        }
        return 0;
    }
    

     hdu 4708

    Rotation Lock Puzzle

    就是给你一个n*n的矩阵(n为奇数),通过旋转使得对角线的值最大,并输出旋转次数

    简单模拟,对每一层进行枚举,得到这一层的最大值,计算这个最大值通过几次旋转得到,

    使用  i 表示层数,j表示旋转次数

    i <= n/2, j < (n- (i-1)*2)-1

    然后枚举对角线得到这个值 ans = a[i+j][i] + a[n-(i-1)-j][n-(i-1)] + a[n-(i-1)][i+j] + a[i][n-(i-1)-j];

    判断这个值是否是最大然后计算旋转次数 使用t来保存 t = j < (n-(i-1)*2 )-j -1? j : (n-(i-1)*2 )-j-1;

    当最值相同的时候 保留旋转次数最少的那个

    代码:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int a[20][20];
    
    int main()
    {
        int n,i,j;
        while(scanf("%d",&n) && n)
        {
            int ans = 0;
            int max = 0x80000000;
            int max_x = 0;
            int sum_x = 0,t,sum = 0;
            memset(a,0,sizeof(a));
            for(i = 1; i <= n; i++)
                for(j = 1; j <= n; j++)
                    scanf("%d",&a[i][j]);
                for(i = 1; i <= n/2; i++)
                    {
                        max = 0x80000000;
                        max_x = 0;
                        for(j = 0; j < n-(i-1)*2-1; j++)
                        {
                        ans = a[i+j][i] + a[n-(i-1)-j][n-(i-1)] + a[n-(i-1)][i+j] + a[i][n-(i-1)-j];
    
                        if(ans > max)
                        {
                            max = ans;
                            t = j < (n-(i-1)*2 )-j -1? j : (n-(i-1)*2 )-j-1;
    
                            max_x =  t;
                        }
    
                        if(ans == max)
                        {
                            t = j < (n-(i-1)*2 )-j -1? j : (n-(i-1)*2 )-j-1;
                            if(max_x > t)
                            {
                                max = ans;
                                max_x = t;
                            }
                        }
                    }
                    sum += max;
                    sum_x += max_x;
                    }
                sum += a[n/2+1][n/2+1];
                printf("%d %d
    ",sum,sum_x);
        }
        return 0;
    }
    

     hdu 4715

    Difference Between Primes

    这题是求一个数使用两个素数之差来表示 a - b = x ,输出这两个最小素数,这里的x是整数

    思路: 首先进行素数打表,然后枚举a 判断b是否的素数,当x为负数的时候,将x当正数处理 相反输出即可

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    #define N 1000007
    
    int prime[N];
    
    void init_prime()
    {
        int i,j;
       memset(prime,0,sizeof(prime));
        prime[0]=1; prime[1]=1;
        for(i=2;i<N;i++)
        {
            if(prime[i]==0)
            {
                for(j=i*2;j<N;j+=i) prime[j]=1;
            }
        }
    }
    int main()
    {
    
        init_prime();
        int T,x1,x,i,y,z,t;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&x1);
            int flag = 1;
            int T_T = 0;
            y = 0,z = 0;
            x = (fabs)(x1);
            for(i = x; i < N; i++)
            if(prime[i] == 0)
            {
                if(T_T > 1 && (fabs)(y-z) > x )
                   {
                     break;
                   }
    
                T_T++;
                if(T_T & 1)
                    y = i;
                else
                    z = i;
    
                t = i - x;
                if(prime[t] == 0 && t > 0)
                {
                    if(x1 >= 0)
                    printf("%d %d
    ",i,t);
                    else
                    printf("%d %d
    ",t,i);
                    flag = 0;
                    break;
                }
            }
            if(flag)
                printf("FAIL
    ");
        }
        return 0;
    }
    

     后续更新。。。。

  • 相关阅读:
    Flink
    数据工程师
    数据库中间件
    数据仓库
    数据库
    设计模式
    机器学习
    Collections
    Concurrency
    Java
  • 原文地址:https://www.cnblogs.com/yyroom/p/3312370.html
Copyright © 2011-2022 走看看