我是靠谱客的博主 花痴帽子,最近开发中收集的这篇文章主要介绍21-22(2)第2次线上赛,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

21-22(2)第2次线上赛

罗少的一年级数学

描述

罗少做数学题经常把加法题看成减法题。有一天涂涂出了两个整数相加的算术题,罗少当成了这两个整数相减,于是给出了减法计算的结果。

大范手上有罗少的减法计算结果和涂涂的加法计算答案,但没有题目。大范想要知道题目中两个整数分别是多少。

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由两个整数a和b组成,其中a表示两个整数相减的结果,b表示两个整数相加的结果。(-1e6<=a,b<=1e6)

输出

针对每组案例,如果无解,输出-1;如果有多个解,输出-2;如果只有唯一解,输出两个整数,这两个数之差等于a(第一个数减第二个数),之和等于b。两个数之间有一个空格。

每组案例输出都要换行。

样例输入

2
10 6
8 11

样例输出

8 -2

-1

code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//x-y=a x+y=b
//x=(a+b)/2 y=(b-a)/2
int main() {
int n;
cin >> n;
while (n--) {
int a, b;
cin >> a >> b;
double x = 1.0 * (a + b) / 2;
double y = 1.0 * (b - a) / 2;
if (x != int(x) || y != int(y))//判断解出来的方程是否为整数
puts("-1");
else
cout << x << ' ' << y << endl;
//没有-2的情况 两个方程两个未知数必定有解
}
}

二、罗少的七年级生物

描述

罗少在做生物实验时,发现有一种生物的遗传链由一长串的0和1组成。该生物父系和母系具有相同长度的遗传链;同一位置上如果都是0,那么后代该位置上一定也是0;同一位置上如果都是1,那么后代该位置上一定也是1;同一位置上如果一个0一个1,那么后代该位置上可能是0也可能是1。

现在已知三个该种生物的遗传链,问有没有可能其中一个是另外两个的后代?如果有可能,输出Yes;如果不可能,输出No。

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由3个字符串组成,每个字符串都是由字符0和字符1组成。保证这三个字符串的长度是相同的。(长度不大于100)

输出

针对每组案例,根据问题描述中的说明,输出Yes或No。

每组案例输出完都要换行。

样例输入

2
1101 0111 0101
111 100 010

样例输出

Yes

No

code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+14;
bool check(string fa,string ma,string son) {//根据题意判断儿子是不是亲生的
for (int i = 0; i < fa.size(); i++) {
if (fa[i] == ma[i] && fa[i] != son[i])//父母相同,儿子就必相同,如果不相同就不是亲生的
return 0;
}
return 1;
}
int main() {
int n;
cin >> n;
while (n--) {
string s1, s2, s3;
cin >> s1 >> s2 >> s3;
if (check(s1, s2, s3) || check(s1, s3, s2) || check(s2, s3, s1))//不知道哪个是父,哪个是母,哪个是儿子,都试一遍
puts("Yes");
else
puts("No");
}
}

三、TQL喜欢的科目

描述

TQL每天都会花一些时间看书学习,学习一段时间以后会放松一下自己(比如做点线性代数题),然后继续学习另一门课程。现在已知TQL一天的学习记录(从6:00开始,最晚到第二天的2:00),需要找到其中用时总和最长的一门课程。例如从8:15到9:05是线性代数,从10:00到10:15是英语,从11:00到11:20是线性代数,从20:00到0:15是C++,显然其中学习时间最长的是C++。

输入

只有一组案例。

一个正整数n,表示有n个学习时间段。(n<=100)

然后是n行数据,每行数据包含三个字符串:一个起始时间和一个终止时间,还有课程的名字,两两之间用一个空格间隔。其中时间格式是“小时:分钟”,没有空格,冒号是英文字符,不是中文冒号。小时采用24小时制,如果小时只有一位数字,那么不会有十位数的0;分钟为一位数字时,则会保留十位数的0。例如8点会显示为8:00,而不会是08:00或者8:0。课程名字可能会含有空格。

保证是按照从早到晚的顺序列出学习记录,保证每段学习时间不会有重叠。

输出

输出一个字符串,表示用时总和最长的课程名字。如果出现并列,那么显示并列课程中,首次学习时间最早的那门(注意一天的学习从6:00开始)。

不要换行。

样例输入

4
8:15 9:05 Linear Algebra
10:00 10:15 English
11:00 11:20 Linear Algebra
23:05 0:15 CPP

样例输出

Linear Algebra

code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;//第一个int代表时间的早晚,第二个int代表学习时间
int main() {
map<string, pii> mp;
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
int h, m, hh, mm;
scanf("%d:%d %d:%d ", &h, &m, &hh, &mm);//通过scanf格式输入很方便
h = (h <= 2) ? h += 24 : h;//小于两点钟了说明是第二天了 直接看成24点往上加
hh = (hh <= 2) ? hh += 24 : hh;
int time = hh * 60 + mm - h * 60 - m;//计算学习时间
string s;
getline(cin, s);
mp[s].second += time;//通过课程名字增加时间(合并)
mp[s].first = mp[s].first == 0 ? i : mp[s].first;//如果课程是第一次出现,那么第一个int变成i来表示学习的时间顺序
}
//寻找最长学习时间
int maxtime = -1, maxTime = 999;
string ans;
for (auto i: mp) {
if (i.second.second > maxtime || i.second.second == maxtime && i.second.first <maxTime) {//如果学习时间比maxtime大,或者学习时间相同但是学习的比较早就将maxtime的值改变,将名字存入ans
ans = i.first;
maxtime = i.second.second;
maxTime = i.second.first;
}
}
cout << ans;
}

四、罗少的二年级数学

描述

罗少做数学题经常把加法题看成乘法题。有一天涂涂出了三个正整数相加的算术题,罗少当成了这三个正整数相乘,于是给出了乘法计算的结果。

大范手上有罗少的乘法计算结果和涂涂的加法计算答案,但没有题目。大范想要知道题目中三个正整数分别是多少。

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由两个正整数a和b组成,其中a表示三个正整数相乘的结果,b表示三个正整数相加的结果。(a,b<=1e6)

输出

针对每组案例,如果无解,输出-1;如果有多个解,输出-2;如果只有唯一解,按从小到大的顺序输出三个正整数,这三个数之积等于a,之和等于b。每两个数之间有一个空格。

每组案例输出都要换行。

样例输入

2
45 11
10 9

样例输出

3 3 5

-1

code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+14;
int main() {
int n;
cin >> n;
while (n--) {
int a, b, c;
int x, y, z;
int cnt = 0;
cin >> a >> b;
for (int i = 1; i * i * i < a; i++) {//第一个数字
if (a % i == 0) {//如果能被整除
c = a / i;//后两个数字的乘积
for (int j = i; j * j <= c; j++) {
if (c % j == 0 && i + j + c / j == b) {//判断条件
x = i, y = j, z = c / j;
cnt++;
}
}
}
}
if (cnt == 0)//无解的情况
cout << -1 << endl;
else if (cnt > 1)//多解的情况
cout << -2 << endl;
else printf("%d %d %dn", x, y, z);//只有一解的情况
}
}

五、罗少的七年级数学

描述

罗少做数学题经常把幂运算题看成乘法题。有一天涂涂出了求x的y次幂的计算题,其中x和y都是正整数,罗少当成了x与y相乘,于是给出了乘法计算的结果。

大范手上有罗少的乘法计算结果和涂涂幂运算答案的最后m位数字,但没有题目。大范想要知道题目中的x和y分别是多少。

输入

多组案例。一个正整数n,表示案例的数量。(n<=10000)

每组案例由三个正整数a、b、m组成,其中a表示两个正整数的乘积,b表示两个正整数幂运算的后m位数字(如果这m位数字以0开头,会省略前导0,例如后5位数是00120,那么b会表示成120)。(a<=1e9,m<=9,b<=10^m-1)

输出

针对每组案例,如果无解,输出-1;如果有多个解,输出一个整数,表示解的数量;如果只有唯一解,输出x和y,满足x与y之积等于a,且x的y次幂的后m位数字等于b。每两个数之间有一个空格。

每组案例输出都要换行。

样例输入

2
15 43 2
15 34 2

样例输出

3 5

-1

code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qpmod(ll a, ll b,ll mod=0x7fffffff)//快速幂
{
ll ans = 1;
while (b) {
if (b & 1)
ans = (ans * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return ans;
}
int main() {
int n;
cin >> n;
while (n--) {
int a, b, m;
cin >> a >> b >> m;
int x, y, cnt = 0;
m = qpmod(10, m);//取后面m位就是对10的m次取余
for (int i = 1; i * i <= a; i++) {
if (a % i == 0) {//如果a能被整除
if (qpmod(i, a / i, m) == b) {//判断这两个数的幂运算符不符合
x = i;
y = a / i;
cnt++;
}
if (a / i != i && qpmod(a / i, i, m) == b) {//倒过来幂运算,要考虑完全平方数会在上面的if算过的情况
x = a / i;
y = i;
cnt++;
}
}
}
if (cnt == 0)puts("-1");//无解的情况
else if (cnt > 1) cout << cnt << endl;//多解的情况
else printf("%d %dn", x, y);//一解的情况
}
}

六、炉石传说-3

描述

你的回合开始:此时你控制 n 个随从,他们的攻击力分别是 a1、a2、…、an,对方控制着一个嘲讽随从,生命值为 x。

在本回合中,你需要尽可能地降低对手英雄的血量,但是在攻击敌方英雄前,你必须先处理掉这个具有嘲讽技能的随从。

你的每个随从在本回合中仅可以攻击 1 次:

若攻击嘲讽随从,则嘲讽随从将受到等同于攻击随从攻击力的伤害;

若攻击敌方英雄,则敌方英雄将受到等同于攻击随从攻击力的伤害;

当对方嘲讽随从受到一次攻击后,生命值若小于等于 0 则视为被消灭,此时你的其它尚未攻击的随从才可以攻击敌方英雄。

输入

第一行包含两个正整数 x 和 n 分别表示嘲讽随从的生命值和你的随从数量。(1 <= x <= 10000,1 <= n <= 100)

然后 n 个正整数 a1、a2、…、an 分别表示你的这些随从的攻击力。(1 <= ai <= 200)

输出

在本回合中,敌方英雄最多可以受到多少点伤害,然后换行。

样例输入

11 4
5 2 7 3

样例输出

5

code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=1e9;
int attack[10000];//伤害
bool dp[10000];//嘲讽怪能受到的伤害
int main(){
int hp,n,sum=0;//sum伤害总和
cin>>hp>>n;//hp嘲讽怪血量,n卡牌数量
for(int i=0;i<n;i++){
cin>>attack[i];
sum+=attack[i];
}
dp[0]=1;//可以对嘲讽怪造成0点伤害
int cnt=INF;
for(int i=0;i<n;i++){//第i张牌对嘲讽怪造成伤害
for(int j=hp-1;j>=0;j--){
if(dp[j]){//在造成j点伤害的同时继续追加attack[i]点伤害
if(j+attack[i]>=hp)
cnt=min(cnt,j+attack[i]);//寻找最接近hp的伤害
else
dp[j+attack[i]]=1;//不够就记录能造成的伤害
}
}
}
if(cnt==INF)puts("0");//全部伤害丢给嘲讽怪了还是不够或刚好
else cout<<sum-cnt<<endl;//丢给嘲讽怪后剩下的伤害
}

最后

以上就是花痴帽子为你收集整理的21-22(2)第2次线上赛的全部内容,希望文章能够帮你解决21-22(2)第2次线上赛所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部