【套题】大沥2019年真题——第1~3题
01.平方
题目描述
给出两个整数 a 和 b,如果 a*a 大于 b*b,输出 2;如果 a*a 等于 b*b,输出 1;否则输出 0。
输入格式
一行,两个整数 a 和 b。
输出格式
一个整数。
数据范围
80%的数据, -1000<=a,b<=1000。
100%的数据, -100000000000 <= a,b <= 100000000000
题解:很简单的判断。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
if(a*a>b*b) cout<<2;
else if(a*a==b*b) cout<<1;
else cout<<0;
return 0;
}
02.棋子
题目描述
棋盘从左往右分成 N 个格子。棋盘上有且仅有 1 只白色棋子(‘W’表示白旗)和零个或多个黑色棋子(‘B’ 表示黑旗)。在游戏开始时,白棋放置在棋盘的第 1 个格子上,黑棋放置在其他格子上,一个棋子占据一 个格子。没有棋子的格子为空(用‘-’表示)。
FJ 然后开始移动白棋,他的每一步都可以做以下两件事之一(不能做其他事):
1、如果白旗的右邻居格子为空,FJ 会将白棋向右移动一个格子。
2、如果白旗的右邻居格子是黑棋,且该黑棋的右邻居为空,那么 FJ 会将白棋移动到该黑棋的右邻居。
FJ 一直重复上述操作,直到不能移动为止。
给定棋盘的初始状态,请输出游戏的最终状态。
输入格式
一个长度不超过 50 的字符串 S,表示棋盘的初始状态。‘W’表示白旗,‘B’表示黑旗,-’表示空格子。
输出格式
一个字符串,表示棋盘的最终状态。
题解:模拟算法,只需注意该棋子是否不能移动。
#include<bits/stdc++.h>
using namespace std;
string c;
int main(){
cin>>c;
for(int i=0;i<c.size();i++)
{
if(c[i]=='W')
{
if(c[i+1]=='-') c[i+1]='W',c[i]='-';
if(c[i+1]=='B'&&c[i+2]=='-') c[i]='-',c[i+2]='W';
}
}
cout<<c;
return 0;
}
03.小偷
题目描述
农场有 8 个牛棚,它们名称分别是:"Hall", "Kitchen", "Ballroom", "Conservatory", "Cellar", "Library", "Lounge", "Study"。
有一只奶牛在时刻 T 在牛棚 R 被偷了。现在有 6 个嫌疑犯,他们的姓名 分别是:"White", "Green", "Peacock", "Plum", "Scarlett", "Mustard"。
一开始,所有的嫌疑犯都在 第 1 个牛棚"Hall"。
然后按照时间顺序依次发生了 N 个事件,第 i 个事件的格式是给出 3 个参数: eventTime[i] 、 eventPerson[i] 、 eventRoom[i] , 表 示 的 意 义 是 : 在 时 刻 eventTime[i], 嫌 疑 犯 eventPerson[i]来到了牛棚 eventRoom[i]。
法官判案的标准是:如果在时刻 T,有且只有 1 个嫌疑犯在牛棚 R,那么这个嫌疑犯就是小偷!否则找不出 谁是真正的小偷。
输入格式
第一行,R 和 T。R 是字符串,表示案发牛棚的名称,R 是 8 个牛棚其中的一个。1 <= T <= 1000。
第二行,一个整数 N。 0 <= N <= 50。
接下来有 N 行,第 i 行是:eventTime[i]、eventPerson[i]、eventRoom[i]。
输出格式
如果能找出小偷,输出小偷的姓名。
如果不能,输出-1。
题解:用人名定义一个映射(没学过映射map的可以去看【数据类型】映射map——学霸小羊 稍微学习一下),代表的是映射值代表的人在键值代表的牛棚。再根据输入得出每个人最后在哪间牛棚,然后再检查事发时间谁在事发牛棚即可。
#include <bits/stdc++.h>
using namespace std;
map<string,string>f1;
string a,ans;
int t,n;
string b[6]={"White","Green","Peacock","Plum","Scarlett","Mustard"} ;
int main(){
cin>>a>>t;
for(int i=0;i<6;i++) f1[b[i]] = "Hall";
cin>>n;
for(int i=1;i<=n;i++)
{
int a;
string b,c;
cin>>a>>b>>c;
if(a>t) break;
f1[b]=c;
}
int s=0;
for(int i=0;i<6;i++)
{
if(f1[b[i]]==a)
{
s++;
ans=b[i];
}
}
if(s==1) cout<<ans;
else cout<<"-1";
return 0;
}