2014 Shanghai Invitation Contest

题目链接

http://acm.hdu.edu.cn/search.php?field=problem&key=2014%C9%CF%BA%A3%C8%AB%B9%FA%D1%FB%C7%EB%C8%FC%A1%AA%A1%AA%CC%E2%C4%BF%D6%D8%CF%D6%A3%A8%B8%D0%D0%BB%C9%CF%BA%A3%B4%F3%D1%A7%CC%E1%B9%A9%CC%E2%C4%BF%A3%A9&source=1&searchmode=source

A:思维题

  题意:给你n个数,Jerry可以任意对每个数进行操作,操作方法是对每个数加0,或者k的整倍数。问能不能让1---n这n个数每个数只出现一次。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
int a[maxn],cnt[maxn];
int T,n,k;
int main ()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&k);
        bool fg=1;
        memset(cnt,0,sizeof(cnt));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]>n)
                fg=0;
            if(fg)
                cnt[a[i]]++;
        }
        for(int i=1;i<=n&&fg;i++)//向后滚动
        {
            if(cnt[i]>1)
            {
                cnt[i+k]+=(cnt[i]-1);
                cnt[i]=1;
            }
        }
        for(int i=1;i<=n&&fg;i++)
        {
            if(cnt[i]!=1)
                fg=0;
        }
        if(fg)
            printf("Jerry
");
        else
            printf("Tom
");
    }
    return 0;
}

B:题意很好懂算法是,线段树+扫描线。

C:

D:放置战舰(二分图)

F:给出一个表达式的系数和变量,然后输出表达式。注意下面几个点1、第一个数、最后一个数。2、正负数。3、0,-1,1特判。4、如果全部为零,输出0。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=150;
char s[maxn]={'0','p','q','r','u','v','w','x','y','z','j'};//10;
int a[maxn];
int T,n,k;
int main ()
{
    scanf("%d",&T);
    while(T--)
    {
        for(int i=1;i<=10;i++)
            scanf("%d",&a[i]);
        bool fg=1,ok=1;
        for(int i=1;i<=10;i++)
        {
            if(a[i])
            {
                ok=0;
                if(fg)//第一个
                {
                    if(i!=10)
                    {
                        if(a[i]==1)
                        {
                            printf("%c",s[i]);
                        }
                        else if(a[i]==-1)
                        {
                            printf("-%c",s[i]);
                        }
                        else
                            printf("%d%c",a[i],s[i]);
                    }
                    else
                        printf("%d",a[i]);
                    fg=0;
                }
                else
                {
                    if(i!=10)
                    {
                        if(a[i]>0)
                        {
                            if(a[i]==1)
                                printf("+%c",s[i]);
                            else
                                printf("+%d%c",a[i],s[i]);
                        }
                        else
                        {
                            if(a[i]==-1)
                                printf("-%c",s[i]);
                            else
                                printf("%d%c",a[i],s[i]);
                        }
                    }
                    else
                    {
                        if(a[i]>0)
                            printf("+%d",a[i]);
                        else
                            printf("%d",a[i]);
                    }
                }
            }
        }
        if(ok)
            printf("0
");
        printf("
");
    }
    return 0;
}

 J:判断安卓手机型号的大小。注意:1、如果最后一个字母是A,那么通常省略。2、如果第二个字母相同则比较后面所有的字母,否则最后一个字母不包含在内。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
char s1[maxn],s2[maxn];
int T;
int cmp(int s,int t)
{
    for(int i=s;i<=t;i++)
    {
        if(s1[i]>s2[i])
            return 1;
        if(s1[i]<s2[i])
            return -1;
    }
    return 0;
}
int main ()
{
    int ic=0;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s%s",s1,s2);
        int l=strlen(s1);
        if(l==5)
            s1[5]=='A';
        l=strlen(s2);
        if(l==5)
            s2[5]=='A';
        int a1=cmp(0,0);
        int a2;
        if(s1[1]==s2[1])
            a2=cmp(2,5);
        else
            a2=cmp(2,4);
        printf("Case %d:",++ic);
        if(a1==1)
            printf(" >");
        else if(a1==0)
            printf(" =");
        else
            printf(" <");
        if(a2==1)
            printf(" >
");
        else if(a2==0)
            printf(" =
");
        else
            printf(" <
");
    }
    return 0;
}
想的太多,做的太少。
原文地址:https://www.cnblogs.com/pealicx/p/6131088.html