哈尔滨理工大学第七届程序设计竞赛初赛(低年级组)

水题就不做讲解了~~~~~;

A 蓝廋、香菇
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

 这是 mengxiang000 Tabris 来到幼儿园的第一天, mengxiang000 Tabris 一见面就很投缘, mengxiang000 先说一句话, Tabris 就会紧接着说一句话。如果 mengxiang000 说的是 lansou ,那么 Tabris 就会紧接着说 xianggu 、相反,如果 mengxiang000 说的是 xianggu 、那么 Tabris 就会紧接着说 lansou

输入描述:

第一行输入一个整数t,表示一共的测试数据组数。
每组数据输入一行,包含一个字符串,表示mengxiang000所说的话。
1<=t<=10

输出描述:

每组数据输出一行,包含一个字符串,表示Tabris所说的话。
示例1

输入

2
lansou
xianggu

输出

xianggu
lansou
#include
#include
#include
#include
using namespace std;
int main ()
{
    string str1,str2="xianggu",str3="lansou";
    int t;
    cin>>t;
    while(t--)
    {
        cin>>str1;
        if(str1==str2) cout<

B 分苹果
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

 今天是 Tabris mengxiang000 来到幼儿园的第 天,美丽的老师决定给幼儿园的乖宝宝们发苹果,但是准备分给孩子们的苹果只有 N 个,幼儿园一共有 个孩子。为了不偏袒任何一个孩子,老师决定,给每个孩子的苹果数一样多,如果不够的话从自己有的 K 个苹果中拿出一些分给孩子们。现在老师想知道每个孩子能分得一样多的苹果么?

输入描述:

本题有T组数据
每行有三个整数N,M,K分别代表准备分给孩子们的N个苹果,一共有M个孩子,老师有K个苹果。
1≤T≤200
1≤N,M,K≤100000

输出描述:

如果能使每个孩子得到的苹果数目一样输出YES,否则输出NO。
示例1

输入

3

5 4 38 4 311 5 3

输出

YES
YES
NO
#include
#include
#include
#include
using namespace std;
int main ()
{
    int n,m,k;
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n>>m>>k;
        if(n%m==0) {cout<<"YES"<=m) cout<<"YES"<

C Tabris减肥记
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

 这是mengxiang000和Tabris来到幼儿园的第三天,Tabris在幼儿园每天都吃的很饱,小小年纪就胖成了W斤,mengxiang000笑话他腿粗,这让Tabris是非常难受,立志想要减肥,就在QQ上更改了他的网名以立誓铭志(不廋到120斤不改名)


他给自己定了一个计划,每天都减T斤,他想知道,他多少天后就能修改QQ网名(小于等于120斤都算是廋到了120斤)。

输入描述:

第一行输入一个整数t,表示一共的测试数据组数。
每组测试数据包含两个数,W,T,表示Tabris现在的体重,以及每天计划减少T斤
t<=100
1<=W<=100000
1<=T<=100000

输出描述:

每组数据输出一行,表示多少天后Tabris就可以更改网名了。
示例1

输入

2
128 7
1450 2

输出

2
665
#include 
#include 
  
int main()
{
    int a,b,w,t,i;
    scanf("%d",&a);
    while(a--)
    {
        scanf("%d%d",&w,&t);
       for(i=0;i<=100000;i++)
       {
           b=w-i*t;
           if(b<=120)
           {printf("%d\n",i);
           break;}
       }
    }
    return 0;
}


BFS
D 逃脱
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

  这是mengxiang000和Tabris来到幼儿园的第四天,幼儿园老师在值班的时候突然发现幼儿园某处发生火灾,而且火势蔓延极快,老师在第一时间就发出了警报,位于幼儿园某处的mengxiang000和Tabris听到了火灾警报声的同时拔腿就跑,不知道两人是否能够逃脱险境?

幼儿园可以看成是一个N*M的图,在图中一共包含以下几种元素:

“.”:表示这是一块空地,是可以随意穿梭的。

“#”:表示这是一块墙,是不可以走到这上边来的,但是可以被火烧毁。

“S”:表示mengxiang000和Tabris所在位子。

“E”:表示幼儿园的出口。

“*”表示火灾发源地(保证输入只有一个火灾发源地)。

已知每秒有火的地方都会向周围八个格子(上下左右、左上、右上、左下、右下)蔓延火势.mengxiang000和Tabris每秒都可以选择周围四个格子(上下左右)进行移动。(假设两人这一秒行动完之后,火势才蔓延开)

根据已知条件,判断两人能否成功逃脱险境,如果可以,输出最短逃离时间,否则输出T_T。

输入描述:

第一行输入一个整数t,表示一共的测试数据组数。
第二行输入两个整数n,m,表示幼儿园的大小。
接下来n行,每行m个字符,表示此格子是什么元素。
t<=200
3<=n<=30
3<=M<=30
保证图中有一个起点,一个出口,一个火灾源处.
为了防止孩子们嬉戏中受伤,墙体是橡胶制作的,可以燃烧的哦。

输出描述:

每组数据输出一行,如果两人能够成功到达出口,那么输出最短逃离时间,否则输出T_T
示例1

输入

3
5 5
*....
.....
..S#.
...E.
.....
5 5
...#*
..#S#
...##
....E
.....
5 5
.....
S....
..*#.
...E.
.....

输出

2
T_T
T_T

说明

为了防止孩子们嬉戏中受伤,墙体是橡胶制作的,可以燃烧的哦。
#include
using namespace std;
typedef long long LL;

const int N=50;

int huo[N][N];
char ma[N][N];
int n,m;
int sx,sy;
int ex,ey;
struct node
{
    int x,y;
    int step;
};
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};

void BFS()
{
    bool vis[N][N];
    queueQ;
    memset(vis,0,sizeof(vis));
    node now,next;
    now.x=sx;
    now.y=sy;
    now.step=0;
    vis[sx][sy]=1;

    Q.push(now);

    while(!Q.empty())
    {
        now=Q.front();
        Q.pop();
        if(now.x==ex&&now.y==ey)
        {
            printf("%d\n",now.step);
            return;
        }
        if(huo[now.x][now.y]<=now.step)
            continue;
        for(int i=0;i<4;++i)
        {
            int x=now.x+dx[i];
            int y=now.y+dy[i];
            if(x<0||y<0||x>=n||y>=m||vis[x][y]||ma[x][y]=='#'||huo[x][y]
E 简单的加法运算

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

今天是Tabris和mengxiang000上幼儿园的第5天了。

美丽的老师教了一个非常简单的知识——加法运算。

最后在黑板上写下一些数,让同学们计算这些数的加和,对于刚刚学完加法的Tabris自然是so easy。但是对于IQ卡待充值的mengxiang000来说,真的太难了,于是mengxiang000来向你求助,你能帮帮他么?

输入描述:

本题有T组数据。
每组数据有一行数字。
1≤T≤200
1≤数字个数≤1000
1≤数字大小≤100000

输出描述:

输出每行数的和,并换行。
示例1

输入

2
1 2 3 4 5 6
1 3 5

输出

21
9
#include 
#include 
 
int main()
{
    char c;
    int sum,n,j;
    while(scanf("%d",&n)!=EOF)
    {
        while(n--)
        {
            sum = 0;
            c=' ';
            while(c != '\n')
            {
                scanf("%d%c",&j,&c);
            sum+=j;
            }
            printf("%d\n",sum);
        }
    }
    return 0;
}

F 神奇的数字
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

  今天是 Tabris mengxiang000 来到幼儿园的第 6 天,美丽的老师在黑板上写了几个数字: 121,11,131 ,聪明的 Tabris 一眼就看出这些数字是那样的神奇——无论是正着写还是反着写都是一样的, mengxiang000 想要得到更多的这样有趣的数,又因为这是二人到幼儿园的第 6 天, 6+2=8 。他们想知道长度为 8 的这样的数都有哪些。但是写着写着机智的 Tabris 发现这样神奇的数实在太多了,所以向你求助,你能帮帮他们吗?

输入描述:

输出描述:

从小到大输出所有符合题意的数,每个数占一行。
示例1

输入

none

输出

none
#include 
#include 
#include 
 
int main()
{
    int i, k1, k2, k3, k4, k5, k6, k7, k8;
    for(i=10000000; i<100000000; i++)
    {
        k1=i/10000000;
        k2=i%10000000/1000000;
        k3=i%1000000/100000;
        k4=i%100000/10000;
        k5=i%10000/1000;
        k6=i%1000/100;
        k7=i%100/10;
        k8=i%10;
        if((k1==k8)&&(k2==k7)&&(k3==k6)&&(k4==k5))
        {
            printf("%d\n", i);
        }
    }
    return 0;
}

G 做游戏
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

今天是 Tabris mengxiang000 来到幼儿园的第 9 天。

为了庆祝这美好的一天,老师组织同学们做游戏,拿来了好多骰子。

游戏规则:

1)两个人每人轮流掷骰子,操控同一个小人在一个有向的地图上走,骰子的点数是几,这个小人就向前走几格。

2) 地图只有一条路,路上有起点、终点和传送阵。传送阵会只能传送到最近接终点的另一个传送阵的位置上,否则传送阵势不会发动。

3)只要路过传送阵就会被传送走、并继续走完应走的步数,一个传送阵作为入口或出口只能使用一次。

4)小人到达终点时最后一个掷骰子的人获胜,且游戏结束。

Tabris与mengxiang000这两个傻孩子,并没有弄懂规则,就在一边轮流掷骰子玩了。

现在给你这张地图,和Tabris与mengxiang000总共掷骰子的次数与每次骰子的点数,你知道他俩应该谁赢么?(Tabris先掷骰子)

为了简化问题,‘S’代表起点、‘E’代表终点、‘@’代表传送阵、‘.’代表普通作为路的格子。

输入描述:

本题有T组数据
每组数据第一行有一行字符串代表地图。
第二行包含一个整数N,代表Tabris与mengxiang000总共掷骰子的次数。
第三行帮扩N个整数a_i ,代表每次的点数。
1≤地图长度≤10000
1≤T≤200
1≤N≤200
1≤a_i≤6

输出描述:

如果小人到达终点,输出赢家的名字,否则输出None。
示例1

输入

2
S...@[email protected]
3
6 6 6
[email protected]
3
6 6 6

输出

mengxiang000
Tabris

说明


从传送门的入口进入到出口出去相当于走了一格。

对于第一组样例:

箭头所示位置为小人所在的位置


#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long LL;

const int maxn=1e5+7;

char  mp[maxn];

int main ()
{
    int t;
    cin>>t;
    while(t--)
    {
        scanf("%s",mp);
        int idx=-1;
        int len=strlen(mp);
        for(int i=len-1;i>=0;i--)
          if(mp[i]=='@') {idx=i;break;}
          int n;
          scanf("%d",&n);
          int x,flag=-1,pos=0;

          for(int i=0;i=len-1) {flag=i&1;break;}
              }
          }
          if(flag==-1) puts("None");
          else puts(!flag?"Tabris":"mengxiang000");
    }
    return 0;
}

H 魔法阵
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

  这是mengxiang000和Tabris来到幼儿园的第七天,mengixang000发动了一个魔法阵,能够召唤出来两只逗逼兽.每只逗逼兽都有自己的名字,而且两只逗逼兽的名字长度是相同的,逗逼兽是要成对出现的才有战斗力,其战斗力是根据其名字而决定的,如果其中一只的名字是s,另外一只的名字为t,那么其战斗力为:

n-1 n-1

Σ  Σ  F(shift(s,i),shift(t,j));

i=0 j=0

shift(s,i)表示是以字母s[i]开头的字符串.

例如:

shift(ACC,0)=ACC

shift(ACC,1)=CCA

shift(ACC,2)=CAC

F(字符串A,字符串B)=字符串A和字符串B对应相同位子上相同字母的个数和,现在已知两只逗逼兽的名字,求其战斗力。

例如,如果某只逗逼兽的名字是ACC,另一只逗逼兽的名字是ACG那么这两只逗逼兽的战斗力的值就是:

F(ACC,ACG)+F(ACC,CGA)+F(ACC,GAC)+

F(CCA,ACG)+F(CCA,CGA)+F(CCA,GAC)+

F (CAC,ACG) +F(CAC,CGA)+F(CAC,GAC)

=2+0+1+1+2+0+0+1+2=9。

输入描述:

第一行输入一个整数t,表示一共的测试数据组数。
每组数据输入两行,每行输入一只逗逼兽的名字,保证两只逗逼兽的名字长度相同,保证输入的字符都是大写字母。
t<=100
1<=逗逼兽的名字的长度<=100000

输出描述:

每组数据输出一行,包含一个整数,表示两只逗逼兽的战斗力。 (保证输出结果在2^60以内)
示例1

输入

1
ACC
ACG

输出

9
#include
#include
using namespace std;

const int maxn=1e5+7;
char a[maxn],b[maxn];

int main ()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s %s",a,b);
        int len=strlen(a);
        long long ans=0;
        for(int i='A';i<='Z';i++)
        {
            long long a1=0,b1=0;
            for(int j=0;j

I 布置会场(I)
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

今天是Tabris和mengxiang000来到幼儿园的第3天,mengxiang000接到了一个布置会场的任务。

他需要将贵宾观众席的椅子排成一排,一共需要N个。

幼儿园只有两种椅子,所以他也只能使用两种椅子。(A类型和B类型)并且假设每种椅子的数量都是无限的。

而其如果想要摆置一个B类型的椅子,对应就需要必须有连续两个一起布置。换句话说,就是如果出现了B类型的椅子,其必须且只有两个连着B类型的椅子。

mengxiang000突然想知道对应N个椅子排成一列,他能够有多少种布置的方式.

输入描述:

本题包含多组输入第一行输入一个整数t,表示测试数据的组数
每组测试数据包含一行,输入一个整数N,表示一共需要摆放的椅子数量
t<=30
1<=N<=30

输出描述:

每组测试数据输出包含一行,表示一共有多少种布置的方式。
示例1

输入

2
2
4

输出

2
5

说明

第一个样例,AA,BB两种方案。
第二个样例,AAAA,BBBB,AABB,ABBA,BBAA五种方案  对于ABBB 因为有连续3个B类型椅子所以不可行
#include
using namespace std;
int main ()
{
    int a[31];
    a[1]=1;a[2]=2;
    for(int i=3;i<=30;i++)
        a[i]=a[i-1]+a[i-2];
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
       scanf("%d",&n);
       printf("%d\n",a[n]);
    }
    return 0;
}


你可能感兴趣的:(牛客网系列赛)