A:距离零点的时刻
题目描述:
已知当前时钟的显示时间为 h 小时 m 分(24 小时制时间格式),请问多少分钟后,时钟会第一次变为 0 时 0 分。
输入格式:
第一行包含整数T,表示共有T组测试数据。
每组数据占一行,包含两个整数h,m。
保证h,m不同时为0,且不含前导0.
输出格式:
每组数据输出一行结果,表示答案。
数据范围:
前三个测试点满足,1<=T<=5.
所有测试点满足,1<=T<=1439, 0 <=h<24, 0<=m<60.
输入样例:
5
23 55
23 0
0 1
4 20
23 59
输入样例:
5
60
1439
1180
1
这个题没有脑子,直接写的。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
int a = 1440;
cin >> n;
for(int i = 0; i < n; i ++){
int b = 0;
int c = 0;
int h,m;
cin >> h >> m;
b = h*60 + m;
c = a - b;
cout << c << endl;
}
return 0;
}
B:第k个字符串
题目描述:
给定两个整数 n 和 k。
用 n−2 个 a 和 2 个 b 来构成一个字符串,则一共可以构成 n(n−1)/2 个不同的字符串。
将这 n(n−1)/2 个字符串按照字典序进行排序。
请输出排好序后,排在第 k 个的字符串。
例如,当 n=5,k=2 时,共可以生成 10 个不同的字符串,按字典序排列如下:
aaabb
aabab
aabba
abaab
ababa
abbaa
baaab
baaba
babaa
bbaaa
其中,排在第2个的字符串为aabab
输入格式:
第一行包含整数 T,表示共有 T 组测试数据。
每组数据占一行,包含两个整数 n 和 k。
输出格式:
每组数据输出一行结果,表示答案。
数据范围:
前三个测试点满足 1≤T≤10,1≤n≤20,1≤k≤100。
所有测试点满足1≤T≤10000,3≤n≤105,1≤k≤min(2×109,n(n−1)/2)。
同一测试点内所有 n 的和不超过 105。
输入样例:
7
5 1
5 2
5 8
5 10
3 1
3 2
20 100
输出样例:
aaabb
aabab
baaba
bbaaa
abb
bab
aaaaabaaaaabaaaaaaaa
之后看了y总的讲解视频,根据k的数值可以先确定一个b的位置,之后再判断另一个b的位置,再输出就可以了。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int _;
cin >> _;
for(int i = 0; i < _; i ++){
int n,k;
cin >> n >> k;
for(int i = n - 1; i; i --){
if(k >n - i)k -= n - i;
else{
string s(n,'a');
s[i - 1] = 'b';
s[n - k] = 'b';
cout << s << endl;
break;
}
}
}
return 0;
}