您的位置:首页 > 其它

哈尔滨理工大学第七届程序设计竞赛初赛 题集

2017-12-10 11:29 176 查看
1.

时间限制: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<bits/stdc++.h>
using namespace std;

int main()
{
int T;
cin >> T;
while (T--)
{
string s;
cin >> s;
if (s == "xianggu")
cout << "lansou" << endl;
else
cout << "xianggu" << endl;
}
}


2.

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32768K,其他语言65536K

64bit IO Format: %lld

题目描述

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

输入描述:

本题有T组数据

每行有三个整数N,M,K分别代表准备分给孩子们的N个苹果,一共有M个孩子,老师有K个苹果。

1≤T≤200

1≤N,M,K≤100000

输出描述:

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

示例1

输入

3

5 4 3

8 4 3

11 5 3

输出

YES

YES

NO

#include<bits/stdc++.h>
using namespace std;

int main()
{
int T;
cin >> T;
while (T--)
{
int n, m, k;
cin >> n >> m >> k;
int ret = n % m;
if(ret == 0)
cout << "YES" << endl;
else if (m - ret <= k)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}


3.

时间限制: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<bits/stdc++.h>
using namespace std;

int main()
{
int T;
cin >> T;
while (T--)
{
int w, t;
cin >> w >> t;
int ans = 0;
while (w > 120)
{
ans ++;
w -= t;
}
cout << ans << endl;
}
}


4.

时间限制: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<bits/stdc++.h>
using namespace std;

int n, m;
char Map[31][31];
int fire[31][31];
int vis[31][31];
int xdir[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int ydir[8] = {1, 0, -1, 0, -1, 1, -1, 1};
int fx, fy;
int sx, sy;
int ex, ey;
struct Node
{
int x, y;
int step;
};
void GetFire()
{
queue<Node> q;
memset(fire, -1, sizeof(fire));
q.push({fx, fy, 0});
fire[fx][fy] = 0;
while (!q.empty())
{
Node temp = q.front();
q.pop();
for (int i = 0; i < 8; i++)
{
int tx = temp.x + xdir[i];
int ty = temp.y + ydir[i];
if (tx < 0 || tx >= n || ty < 0 || ty >= m || fire[tx][ty] != -1)
continue;
fire[tx][ty] = temp.step + 1;
q.push({tx, ty, temp.step + 1});
}
}
// for (int i = 0; i < n; i++)
// {
//  for (int j = 0; j < m; j++)
//      cout << fire[i][j] << " ";
//  cout << endl;
// }
}

int bfs()
{
queue<Node> q;
q.push({sx, sy, 0});
memset(vis, 0, sizeof(vis));
while (!q.empty())
{
Node temp = q.front();
q.pop();
vis[temp.x][temp.y] = 1;
for (int i = 0; i < 4; i++)
{
int tx = temp.x + xdir[i], ty = temp.y + ydir[i];
if (tx < 0 || tx >= n || ty < 0 || ty >= m)
continue;
if (tx == ex && ty == ey && fire[tx][ty] >= temp.step + 1)
return temp.step + 1;
if (vis[tx][ty] || Map[tx][ty] == '#' || fire[tx][ty] <= temp.step + 1)
continue;
q.push({tx, ty, temp.step + 1});
}
}
return -1;
}

int main()
{
int T;
cin >> T;
while (T--)
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
string s;
cin >> s;
for (int j = 0; j < s.length(); j++)
{
Map[i][j] = s[j];
if (s[j] == '*')
fx = i, fy = j;
else if (s[j] == 'S')
sx =
fbc9
i, sy = j;
else if (s[j] == 'E')
ex = i, ey = j;
}
}
GetFire();
int ans = bfs();
if (ans == -1)
cout << "T_T" << endl;
else
cout << ans << endl;
}
}


时间限制: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<bits/stdc++.h>
using namespace std;

int main()
{
int T;
cin >> T;
getchar();
while(T--)
{
int x;
long long sum = 0;
string s;
getline(cin,s);
stringstream ss(s);
while(ss >> x)
sum += x;
cout << sum << endl;
}
}


时间限制: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<bits/stdc++.h>
using namespace std;
string cal(int x)
{

vector<int> v;
while(x)
{
v.push_back(x%10);
x/=10;
}
string s="";
for(auto temp: v)
s+=('0'+temp);
return s;
}
int main()
{
for(int i=1000;i<=9999;i++)
{

cout<<i<<cal(i)<<endl;
}
}


7.

时间限制: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。

include<bits/stdc++.h>
using namespace std;

int a[100000];

int main()
{
int T;
cin >> T;
while (T--)
{
string s;
cin >> s;
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
int cur = -1;
int t;
int cnt = 0;
for (int i = 0; i < s.length(); i++)
if (s[i] == 'S')
cur = i;
else if (s[i] == 'E')
t = i;
else if (s[i] == '@')
cnt ++;
if (cur == -1)
{
cout << "None" << endl;
continue;
}
int flag = 0;
for (int i = 1; i <= n; i++)
{
if (flag)
break;
for (int j = 0; j < a[i]; j++)
{
if (s[cur] == '@')
{
s[cur] = '.';
cnt --;
int dis = 1e9;
int pos = -1;
if (!cnt)
{
cur ++;
continue;
}
for (int j = t; j < s.length(); j++)
{
if (s[j] == '@')
if (dis >= j - t)
{
dis = j - t, pos = j;
break;
}
}
for (int j = t; j >= 0; j --)
if (s[j] == '@')
if (dis >= t - j)
{
dis = t - j , pos = j;
break;
}
if (pos != -1)
{
cur = pos;
s[pos] = '.';
cnt--;
}
else
cur ++;
}
else
{
cur ++;
if (cur >= s.length())
break;
if (!flag && s[cur] == 'E')
{
if (i % 2)
cout << "Tabris" << endl;
else
cout << "mengxiang000" << endl;
flag = 1;
break;
}

}
}
}
if (!flag)
cout << "None" << endl;
}
}


8.

时间限制: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<bits/stdc++.h>
using   namespace std;

int main()
{
int T;
cin >> T;
while (T--)
{
string s1, s2;
cin >> s1 >> s2;
int cnt[26];
memset(cnt, 0, sizeof(cnt));
for (auto op : s1)
cnt[op - 'A'] ++;
long long ans = 0;
for (auto op : s2)
ans += cnt[op - 'A'];
ans *= s1.length();
cout << ans << endl;
}
}


9.

时间限制: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<bits/stdc++.h>
using namespace std;

int main()
{
int T;
cin >> T;
long long dp[50];
dp[1] = 1;
dp[2] = 2;
for(int i = 3;i <= 30;i++)
dp[i] = dp[i - 1] + dp[i - 2];
while(T--)
{
int x;
cin >> x;
cout << dp[x] << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  哈尔滨 acm
相关文章推荐