21-22(2)第三次线上赛
- 有些题目可能有c++版本和py版本
一、TQL的二年级数学
描述
已知有3个整数a、b、c,TQL想要知道是否可以在a和b之间添加一个四则运算符号(加减乘除),使得运算结果等于c。
注意:
(1)必须a在前b在后
(2)b为负数时,可以在b外面加一对小括号,以符合数学规范
(3)除法是数学意义上的除法,因而5/2=2.5
输入
多组案例。一个正整数n,表示案例的数量。(n<=100)
每组案例由3个整数a、b、c组成。(绝对值均不大于1e9)
输出
针对每组案例,如果可以通过添加一个四则运算符号,让a、b的运算结果为c,那么输出Yes,否则输出No。
每组案例输出完要换行。
样例输入
3
5 3 15
5 3 1
3 5 2
样例输出
Yes
No
No
code:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
while(n--){
double a,b,c;//除法不是整除,干脆用double来存
cin>>a>>b>>c;
double ans1=a+b,ans2=a-b,ans3=a*b,ans4=a/b;
if(ans1==c||ans2==c||ans3==c||ans4==c)//四种情况。
puts("Yes");
else puts("No");
}
}
n = eval(input())#这题用py写的好处是不会溢出,除法就是正常的除法
while n:
n -= 1
a, b, c = map(int, input().split())
if a + b == c or a - b == c or a * b == c or b != 0 and a / b == c:
print('Yes')
else:
print('No')
二、涂涂的小黄鸭
描述
涂涂驾驶一艘游艇以相对于静水恒定的速度在河水里逆流行驶,水流速度小于游艇的速度,在经过一座桥的时候小黄鸭不慎掉落水中,过了t秒时间后,涂涂发现小黄鸭不见了,这时候船已经距离桥s1米。涂涂这时候调头向下游行驶,顺流而下了s2米之后终于追上了小黄鸭。
问涂涂从发现小黄鸭不见到追上小黄鸭,一共花费了多少秒?
输入
多组案例。一个正整数n,表示案例的数量。(n<=100)
每组案例由3个正整数t、s1、s2组成。(均不大于10000,s2保证大于s1)
输出
针对每组案例,输出一个整数,表示涂涂从发现小黄鸭不见到追上小黄鸭,一共花费了多少秒。如果这个数不是整数,那么输出其整数部分。
每组案例输出完都要换行。
样例输入
2
5 10 20
3 10 17
样例输出
自己算
code:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--){
int t,s1,s2;
cin>>t>>s1>>s2;
cout<<t<<endl;//解方程发现答案就是t
}
}
n = eval(input())
while n:
n -= 1
t, s1, s2 = map(int, input().split())
print(t)
三、TQL的四年级数学
描述
TQL和LYF在玩一个放硬币的游戏。有一个长方形的电脑桌,桌子的长和宽分别为a和b,硬币的直径是c。每个人依次放一个硬币,硬币不能重叠放置,一点点重叠都不行。如果轮到某个人放不下硬币了,那么那个人就输了。已知TQL先放,问最后的胜利者是谁?
输入
多组案例。一个正整数n,表示案例的数量。(n<=100)
每组案例由3个正整数a、b、c组成。(a、b<=10000, c<=100)
输出
针对每组案例,输出一个字符串,表示胜利者的名字。
每组案例输出完要换行。
样例输入
2
30 20 5
5 5 10
样例输出
TQL
LYF
code:
//TQL先手将硬币放在桌子中间,之后LYF每放一个硬币,TQL在其中心对称位置摆 放硬币既能必胜。所以TQL能放下第一个硬币就能获胜。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int a,b,c;
cin>>a>>b>>c;
if(a>=c&&b>=c)puts("TQL");
else puts("LYF");
}
}
n = eval(input())
while n:
n -= 1
a, b, c = map(int, input().split())
if a >= c and b >= c:
print('TQL')
else:
print('LYF')
四、TQL的七年级生物
描述
TQL在做生物实验时发现,一种名叫高鼠的生物是单性繁殖生物,在繁殖后代时存在一定的规律。可以用一个字符串c1表示一只高鼠的遗传基因,它生成的下一代遗传基因用字符串c2表示,规则为:
(1)如果字符串a是c1的子串,那么把c1中的第一次出现的子串a替换成另一个子串b,生成c2;
(2)如果字符串a不是c1的子串,那么c2与c1相等。
例如c1=“ABCABCD”,a=“AB”,b=“Z”,则c2=“ZCABCD”。
现在已知一只第1代袋鼠的遗传基因字符串c1和a、b,问由它生成的第2代袋鼠的遗传基因c2是什么?
输入
多组案例。一个正整数T,表示案例的数量。(T<=100)
每组案例中由3个字符串c1、a、b组成。数据规模满足:
(1)c1长度不超过100
(2)a和b的长度均不超过10
(3)b的长度不超过a
(4)a、b是不同的字符串
(5)c1、a、b都是由纯大写英文字母组成
输出
针对每组案例,输出一个字符串,表示第2代袋鼠的遗传基因c2的值。
每组案例输出完要换行。
样例输入
3
DABCABCD AB Z
DABCABCD AD Z
DAAAAAAA AA A
样例输出
DZCABCD
DABCABCD
DAAAAAA
code:
#include<bits/stdc++.h>
using namespace std;
int main() {
int T;
cin>>T;
while(T--){
string c1,a,b;
cin>>c1>>a>>b;
if(c1.find(a)==c1.npos)//没有找到
cout<<c1<<endl;
else{//找到了改变字符串
int pos=c1.find(a);
string c=c1.substr(0,pos);
c+=b;
c+=c1.substr(pos+a.size());
cout<<c<<endl;
}
}
}
T = eval(input())
while T:
T -= 1
c1, a, b = input().split()
if a in c1:#有子串就改变
c1 = c1.replace(a, b, 1)
print(c1)
五、TQL的八年级生物
描述
TQL在做生物实验时发现,一种名叫线性袋鼠的生物是单性繁殖生物,在繁殖后代时有可能会在某处产生变异,变异规则如下:遗传基因可以看成一个字符串c,变异因子可以看成另一个字符串a,如果c中的某处有子串a,那么这就是一个可能产生变异的位置;因为后代不至于变化太大,所以有且仅有一个位置产生变异。TQL想要知道这只袋鼠到底有几个位置有可能产生变异。
例如遗传基因c=“ABCABCD”,变异因子a=“AB”,因为c中有两个位置的子串等于a,故答案是2。
输入
多组案例。一个正整数T,表示案例的数量。(T<=100)
每组案例中由2个字符串c、a组成,其中c表示袋鼠的遗传基因,a表示变异因子。(c的长度不大于1e6,a的长度不大于1e5,a的长度不大于c的长度)
输出
针对每组案例,输出一个整数,表示可能产生变异的位置数量。
每组案例输出完要换行。
样例输入
3
ABCABCD AB
DABABCD AD
AAAAAAA AA
样例输出
2
0
6
code:
#include<bits/stdc++.h>
using namespace std;
void calNext(char p[],int Next[])
{
int len=strlen(p),i=0,j=-1;
Next[0]=-1;
while(i<len){
if(j==-1||p[i]==p[j])Next[++i]=++j;
else j=Next[j];
}
}
int kmp(char a[],string b,int Next[]){
int lenA=strlen(a),lenB=b.size();
int i=0,j=0,cnt=0;
while(i<lenA){
if(j==-1||a[i]==b[j])
i++,j++;
else j=Next[j];
if(j==lenB){
cnt++;
j=Next[j-1];
i--;
}
}
return cnt;
}
int Next[100014];
char c[1000015],a[100015];
int main(){
int T;
cin>>T;
while(T--){
scanf("%s%s",&c,&a);
calNext(a,Next);
cout<<kmp(c,a,Next)<<endl;
}
}
六、TQL的七年级地理
描述
TQL在学习地理的过程中查阅了许多城市的经纬度,并且还知道地球上新的一天以国际日期变更线开始。TQL希望能把这些城市做个整理,按照春分或者秋分时太阳照耀大地的先后顺序依次排列城市。
输入
只有一组案例。
每组案例先是一个正整数n,表示城市的数量,(n<=100)
然后每行是一个城市的信息,由3个不含空格的字符串组成,分别是城市的名字、城市的纬度、城市的经度。(保证不会有城市在南极点、北极点或者国际日期变更线上)
输出
针对每组案例,按【问题描述】中规定的顺序依次输出每个城市的名字,两个城市名字之间要有一个空格。
如果有两个城市按照规定的顺序是并列的,那么优先输出城市名字字符串的值比较小的(注意不是指字符串长度)。
不要换行。
样例输入
5
Xiamen 24.26N 118.04E
Beijing 39.56N 116.2E
London 51.3N 0.1E
NewYork 40.43N 74W
Sydney 33.52S 151.13E
样例输出
Sydney Xiamen Beijing London NewYork
code:
#include<bits/stdc++.h>
using namespace std;
typedef pair<string,double>psb;
bool cmp(psb a,psb b){//排序的定义,由经度来排序,经度相同由名字来排序。
return a.second>b.second||a.second==b.second&&a.first<b.first;
}
int main(){
int n;
cin>>n;
vector<psb>v;
while(n--){
string name,lat,lon;
cin>>name>>lat>>lon;
stringstream ss(lon.substr(0,lon.size()-1));
double a;
ss>>a;
if(lon[lon.size()-1]=='W')a=-a;//如果是西经那么把它变成负的便于排序
v.push_back({name,a});//存入名字和经度
}
sort(v.begin(),v.end(),cmp);
bool f=0;
for(auto it:v){
if(f)
cout<<' ';
else
f=1;
cout<<it.first;
}
}