ACM-TC工作室第一次联合招新赛暨新生第一次月赛

A 你想加入ACM集训队吗?

#include
int main()
{
    printf("YES\n");
    return 0;
}

B 求最大值

利用桶排,计算出现过的每一个字符的个数。最后用一个for循环遍历所有出现过的字符,求出ascii值与出现次数乘积最大的那一个字符。

#include
#include
int main()
{
    int num[1000];
    char s[600];
    while(scanf("%s",s)!=EOF)
    {
        int ma=-1,l=strlen(s);
        memset(num,0,sizeof(num));
        for(int i=0;ima)
                ma=num[s[i]]*s[i];
        }
        printf("%d\n",ma);
    }
    return 0;
}

C 去香港吧

利用结构体存放每一个出现过的字符的:字符、位置、ascii值,然后用sort排序直接排序即可。

#include
#include
using namespace std;
struct node
{
    char c;
    int num;
    int asc;
}a[10004];
bool cmp(node x,node y)
{
    if(x.asc==y.asc)
        return x.num='A'&&s[i]<='Z')
                a[i].asc=s[i]-'A';
            else
                a[i].asc=s[i]-'a';
        }
        sort(a,a+n,cmp);
        printf("%d",a[0].num);
        for(int i=1;i

D 计算清单

注意,我们要将文件结束前的所有物体的总价全部相加,当文件结束后,输出答案。

#include
int main()
{
    char s[100];
    double a,b,sum=0;
    while(scanf("%s %lf %lf",s,&a,&b)!=EOF)
        sum+=a*b;
    printf("%.1f\n",sum);
    return 0;
}

E riba2534的拷问

每一个数字都有他们的特点,找出这个特点,并利用这个特点判断它的值应该是多少,然后进行a+b,输出答案即可。

这个代码是先计算出每一个数字的‘#’有多少个,如果有相同个数的‘#’号,再根据他们的特定的点来判断他们的值。

每一个数字对应的‘#’号的个数如下:

#####   ....#    #####   #####   # . . .#   #####   #####   #####   #####   #####   . . . . .   . . . . .
# . . .#   ....#    . . . . #   . . . . #   # . . .#   # . . . .   # . . . .   . . . .#    # . . .#   # . . .#   . . #. .   . . . . .
# . . .#   ....#    . . . . #   . . . . #   # . . .#   # . . . .   # . . . .   . . . .#    # . . .#   # . . .#   . . #. .    . . . . .
# . . .#   ....#    #####   #####   #####   #####   #####   . . . .#    #####   #####   #####   #####
# . . .#   ....#    # . . . .   . . . .  . . . .#    . . . .#   # . . .#    . . . .#    # . . .#    . . . .#   . . #. .   . . . . .
# . . .#   ....#    # . . . .   . . . . #   . . . .#    . . . .#   # . . .#    . . . .#    # . . .#    . . . .#   . . #. .   . . . . .
#####   ....#    #####   #####   . . . .#   #####   #####    . . . .#    #####   #####   . . . . .   . . . . .
  20        7         19        19          14          19        21          11           23        21        9         5

#include
int main()
{
    int t,a,b,sum,flag;
    char s[7][20];
    scanf("%d",&t);
    while(t--)
    {
        sum=0,flag=0;
        for(int i=0; i<7; i++)
            scanf("%s",s[i]);
        for(int i=0; i<7; i++)
        {
            for(int j=0; j<5; j++)
            {
                if(s[i][j]=='#')
                    sum++;
            }
        }
        if(sum==20)
            a=0;
        else if(sum==7)
            a=1;
        else if(sum==19)
        {
            if(s[1][4]=='#'&&s[4][0]=='#')
                a=2;
            else if(s[1][4]=='#'&&s[4][4]=='#')
                a=3;
            else
                a=5;
        }
        else if(sum==14)
            a=4;
        else if(sum==21)
        {
            if(s[4][0]=='#')
                a=6;
            else
                a=9;
        }
        else if(sum==11)
            a=7;
        else
            a=8;
        sum=0;
        for(int i=0; i<7; i++)
        {
            for(int j=6; j<11; j++)
                if(s[i][j]=='#')
                    sum++;
        }
        if(sum==9)
            flag=1;
        sum=0;
        for(int i=0; i<7; i++)
        {
            for(int j=11; j<17; j++)
                if(s[i][j]=='#')
                    sum++;
        }
        if(sum==20)
            b=0;
        else if(sum==7)
            b=1;
        else if(sum==19)
        {
            if(s[1][16]=='#'&&s[4][12]=='#')
                b=2;
            else if(s[1][16]=='#'&&s[4][16]=='#')
                b=3;
            else
                b=5;
        }
        else if(sum==14)
            b=4;
        else if(sum==21)
        {
            if(s[4][12]=='#')
                b=6;
            else
                b=9;
        }
        else if(sum==11)
            b=7;
        else
            b=8;
        if(flag)
            printf("%d\n",a+b);
        else
            printf("%d\n",a-b);
    }
    return 0;
}

F 二进制加法

从字符串最后面往前面进行计算,然后注意进位问题和前导0问题就行了。

也可以用昨天晚上学长讲的大数加法的方法来做,我就是想告诉你们可以这样做而已。

#include
#include
#include
#include
using namespace std;
int main()
{
    int ans[1003],la,lb,l,k;
    char a[1003],b[1003];
    while(~scanf("%s%s",a,b))
    {
        la=strlen(a);
        lb=strlen(b);
        l=max(la,lb);
        k=0;
        memset(ans,0,sizeof(ans));
        for(int i=1; i<=l; i++)
        {
            if(la-i>=0&&lb-i>=0)
                ans[l-i]=(a[la-i]-'0')+(b[lb-i]-'0')+k;
            else if(la-i<0)
                ans[l-i]=(b[lb-i]-'0')+k;
            else
                ans[l-i]=(a[la-i]-'0')+k;
            k=ans[l-i]/2;
            ans[l-i]%=2;
        }
        if(k)
            printf("1");
        for(int i=0; i

G 2D蛋糕

直接计算蛋糕的每一种边和蛋糕的长宽关系,利用这个关系计算每一种边的个数即可。

具体关系你画一个图就知道了。

#include
#include 
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        if(a>b) swap(a,b);
        if(a==1)
        {
            if(b==1) printf("0 0 0 0 1\n");
            else  printf("0 0 %d 2 0\n",b-2);
        }
        else printf("%d %d 4 0 0\n",(a-2)*(b-2),(a-2)*2+(b-2)*2);
    }
}

H 九宫格解锁

将九宫格标记序号:

1 2 3

4 5 6

7 8 9

先用一个二维数组a[10][10],将所有可行的路径标记为1:如从1可以到5,那么我们使a[1][5]=1;

利用for循环将字符串遍历:如果这个字符到下一个字符是可行的,将这个字符妨碍到的其它的字符标记为1,例如:本来从1到3为不可行的,但是我们如果已经使用过2,那么把a[1][3]=1,a[3][1]=1,标记为可行。如果着一个字符到下一个字符为不可行的,直接退出for循环输出NO。

1、如何判断两个字符是否可行?假设第一个字符化为整数是x,第二个字符化为整数是y,判断a[x][y]是否等于1即可。

2、如何退出for循环?用一个flag标记,flag==0表示我们这个for循环运行到字符串结束,flag==1表示我们提前退出for循环。

3、memcpy(a,b,sizeof(a))是什么意思?让b数组变成与a数组完全相同的数组。(实在不能理解的话,就把a数组定义在while循环里面,去掉b数组)。

#include
#include
int t;
char s[10];
int a[10][10],b[10][10]=
{
    // 1 2 3 4 5 6 7 8 9
    {0,0,0,0,0,0,0,0,0,0},//0
    {0,0,1,0,1,1,1,0,1,0},//1
    {0,1,0,1,1,1,1,1,0,1},//2
    {0,0,1,0,1,1,1,0,1,0},//3
    {0,1,1,1,0,1,0,1,1,1},//4
    {0,1,1,1,1,0,1,1,1,1},//5
    {0,1,1,1,0,1,0,1,1,1},//6
    {0,0,1,0,1,1,1,0,1,0},//7
    {0,1,0,1,1,1,1,1,0,1},//8
    {0,0,1,0,1,1,1,0,1,0}//9
};
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",s);
        memcpy(a,b,sizeof(a));
        int flag=0,l=strlen(s);
        for(int i=0; i

I 打印田字,超级简单

找规律的题目。

#include
#include
int main()
{
    int n,m;
    char a[1003][1003];
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        memset(a,0,sizeof(a));
        for(int i=0; i<=n; i++)
        {
            for(int j=0; j<=m; j++)
                a[i][j]=' ';
        }
        for(int i=0; i

J 神奇的挂钟

要知道从11点~12点钟声不会敲响,从23点到24点钟声也不会敲响。

直接b-a,然后判断上面的情况出现了几次,减去这个次数。

#include
int main()
{
    int t,a,b;
    scanf("%d",&t);
    while(t--)
    {
        int num=0;
        scanf("%d%d",&a,&b);
        if(a<12&&b>=12)
            num++;
        if(b==24)
            num++;
        printf("%d\n",b-a-num);
    }
    return 0;
}

 

你可能感兴趣的:(ACM-TC工作室第一次联合招新赛暨新生第一次月赛)