hdu校赛(2015.11.29)

1003 玩骰子

一道模拟题。。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
int judg(int a1,int a2,int a3,int b1,int b2,int b3)
{
    if(a1==a2 && a2==a3)
    {
       // printf("111111\n");
        if(b1==b2 && b2==b3)
        {
            if(a1>b1)
                return 1;
            else return 0;
        }
        return 1;
    }
    else if((a1==a2 || a2==a3 )|| a1==a3)
    {
        //printf("22222\n");
        if(b1==b2 && b2==b3)
            return 0;
        if(b1!=b2 && b2!=b3 && b1!=b3)
            return 1;
       else if(b1==b2 || b1==b3 ||b2==b3)
        {
            int same,dif;
            if(a1==a2)
            {
                same=a1;
                dif=a3;
            }
            else if(a2==a3)
            {
                same=a2;
                dif=a1;
            }
            else if(a1==a3)
            {
                same=a1;
                dif=a2;
            }
            int sameb,difb;
             if(b1==b2)
            {
                sameb=b1;
                difb=b3;
            }
            else if(b2==b3)
            {
                sameb=b2;
                difb=b1;
            }
            else if(b1==b3)
            {
                sameb=b1;
                difb=b2;
            }
            if(same>sameb)
                return 1;
            else if(same==sameb)
            {
                if(dif>difb)
                    return 1;
                else return 0;
            }
            return 0;
        }
        return 0;
    }
    else if(a1!=a2 && a2!=a3 &&a1!=a3){
         //   printf("333333\n");
        if(b1==b2 || b2==b3 || b1==b3)
            return 0;
        else{
            if(a3>b3)
                return 1;
            else if(a3== b3)
            {
                if(a2>b2)
                    return 1;
                else if(a2==b2)
                {
                    if(a1>b1)
                        return 1;
                }
                return 0;
            }
            return 0;
        }
        return 0;
    }
    return 0;

}
int main()
{
    int t;
    int a[4],b[4],c[4];
    scanf("%d",&t);
    while(t--)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&b[1],&b[2],&b[3]);
        sort(a+1,a+4);
        sort(b+1,b+4);
        if(judg(a[1],a[2],a[3],b[1],b[2],b[3])==1)
        {
            printf("1.000\n");
            continue;
        }
        int ans,hui;
        int max=0;
        for(int i=1;i<=3;i++)
        {
            ans=0;
            for(int j=1;j<=6;j++)
            {
                c[1]=a[1],c[2]=a[2],c[3]=a[3];
                c[i]=j;
                sort(c+1,c+4);
                if(judg(c[1],c[2],c[3],b[1],b[2],b[3])==1)
                {ans++;
                //printf("%d\n",j);
                }
            }
            if(ans>max)
                max=ans;
               // printf("%d\n",ans);
        }
        double sss;
        sss=max/6.0;
        printf("%.3lf\n",sss);
    }
}
1006 指数逆袭

一个dfs,暴力不知道能不能做。。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <limits>
#include <queue>
#include <stack>
#include <vector>
#include <map>

using namespace std;
typedef long long LL;

#define N 1100
#define INF 0x3f3f3f3f
#define PI acos (-1.0)
#define EPS 1e-8
#define met(a, b) memset (a, b, sizeof (a))

int val[N], ans[N], maxn;

void DFS (int n, int m, int len)
{
    if (n%m==0)
    {
        val[len] = m;
        DFS (n/m, m+1, len+1);
    }

    else if (maxn < len)
    {
        maxn = len;
        for (int i=0; i<len; i++)
            ans[i] = val[i];
    }
    return;
}

int main ()
{
    int n;

    while (scanf ("%d", &n) != EOF)
    {
        met (val, 0);
        met (ans, 0);
        maxn = 0;

        int k = sqrt (n);

        for (int i=2; i<=k; i++)
            DFS (n, i, 0);

        if (!maxn)
        {
            maxn = 1;
            ans[0] = n;
        }

        printf ("%d\n", maxn);

        for (int i=0; i<maxn-1; i++)
            printf ("%d*", ans[i]);
        printf ("%d\n", ans[maxn-1]);
    }
    return 0;
}
hdu校赛题意读错,自己还是太蠢了。。


你可能感兴趣的:(HDU)