4
20200301 17122490 38.4
20200301 17122640 38.4
20200301 16122138 38.1
20200229 17122640 39.0
题解:就是算出超过38°的个数,并按要求排序,先按时间,时间相等按度数,度数相等按学号,自己写一个cmp就好
#include
using namespace std;
typedef long long ll;
struct f
{
int day;
int num;
float tem;
};
bool cmp(f a,f b)
{
if(a.day!=b.day)
{
return a.day>b.day;
}
else if(a.tem!=b.tem)
{
return a.tem>b.tem;
}
else
{
return a.num<b.num;
}
}
int main()
{
int n,i,j,k;
cin>>n;
int ans=0;
struct f a[200];
for(i=0;i)
{
cin>>a[i].day>>a[i].num>>a[i].tem;
if(a[i].tem>=38.0)
{
ans++;
}
}
sort(a,a+n,cmp);
cout<endl;
cout<<fixed<1);
int p=0;
for(i=0;i)
{
if(a[i].tem>=38.0)
{
cout<‘ ‘<‘ ‘<endl;
p++;
}
if(p==ans)
{
break;
}
}
return 0;
}
c:最长非公共子序列
Lemon 丢给你两个字母序列 s1s_1s1? 和 s2s_2s2? ,并无情地交给了你一个奇怪的任务——求最长非公共子序列。
序列 a 是 b 的子序列,当且仅当从 b 中删除一些元素(可以是零个或所有)能得到 a。
例如:
我们可以通过从 "abcde" 中删除 "b" 和 "d" 得到 "ace",因此 "ace" 是 "abcde" 的子序列。
同理 "abcde","e" 和 空串 都是 "abcde" 的子序列;
但 "abdc" 不是 "abcde" 的子序列。
序列 c 是
s1s_1s1? 和 s2s_2s2? 的非公共子序列当且仅当它满足以下条件中的任何一个:
- c 是 s1s_1s1? 的子序列但不是 s2s_2s2? 的子序列;
- c 是 s2s_2s2? 的子序列但不是 s1s_1s1? 的子序列。
s1s_1s1? 和 s2s_2s2? 的非公共子序列可能有很多,你只需要求出其中长度最长的非公共子序列的长度。
输入描述:
第一行包含一个字符串 s1s_1s1? ,第二行包含一个字符串 s2s_2s2?。 (1≤∣s1∣,∣s2∣≤50001 \leq |s_1|, |s_2| \leq 50001≤∣s1?∣,∣s2?∣≤5000)
输入保证 s1s_1s1? 和 s2s_2s2? 均只包含小写字母。
输出描述:
在一行输出一个整数,表示最长非公共子序列的长度。
特别地,如果不存在非公共子序列,输出 -1 。
题解:找出最长的非公共子序列是多大,如果这两个字符串长度不同但是内容不相等,那最长的子序列肯定两个字符串中更长的那个,
如果长度内容完全相等,那就没有非公共的子序列就输出-1,如果长度相等内容不相等,那最长的非公共子序列就是他们的长度,因为他们两个不相等
#include//stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
string s1,s2;
int len1,len2;
cin>>s1>>s2;
len1=s1.size();
len2=s2.size();
if(len1!=len2)
{
cout<<max(len1,len2);
}
else
{
if(s1==s2)
{
cout<<-1;
}
else
{
cout<<len1;
}
}
return 0;
}
D.最大字符集
Cubercsl 很喜欢 01 字符串,就像“她喜欢大海”,这一天他想送她一个由 01 字符串组成的集合。
他自然是希望这个集合越多样化越大越好。所以他希望这个集合满足以下条件。
- 每个字符串由 0 和 1 组成。
- 每个字符串长度在 1 到 n 之间,且两两长度不同。
- 集合中任何一个字符串都不是其他字符串的子串。
请你帮他找到满足他要求的最大的集合。
字符串 a 是 b 的子串当且仅当从 b 的头部和尾部删除一些字符(可以是零个或者所有)能得到的 a。
输入描述:
仅一行,包含一个整数 n(1≤n≤3001 \leq n \leq 3001≤n≤300)
输出描述:
第一行输出这个集合的大小 k。
接下来 k 行每行输出一个 01 字符串,表示这个集合的一个元素。
答案不唯一,任何符合要求的答案都会被判为正确。
题解:这题主要就是找字串不同的有几种,其实就是一个规律题,列几个例子就会发现1的时候是1或者0只有一种,2的时候是0,和11
其他情况就是在00里面加个1就好,3的时候就是00 010,4的时候是00 010 0110
E.美味的序列
链接:https://ac.nowcoder.com/acm/contest/5278/E
来源:牛客网
题目描述
Cubercsl 喜欢吃序列,所以这一天不知道谁送了他一个序列,他非常快乐,想把他吃完。
序列的每一段自然也有好吃与不好吃的分别,他用数字标识了每个部分的美味度(可能是负的)。
现在,他可以从头或从尾部花费 1 秒吃掉这个序列的一个元素,并获得这个元素此时的美味度。但是,令他头疼的是,每经过 1秒,所有还没有被吃的部分的美味度会下降 1。
现在 Cubercsl 想知道,如果他按照合理的顺序吃完这个序列,他能获得的最大的美味度的和是多少?
输入描述:
第一行包含一个整数 n (1≤n≤1051\leq n \leq 10 ^ 51≤n≤105) ,表示序列的长度。
第二行包含 n 个整数 a1,a2,…,ana_1, a_2 , \ldots ,a_na1?,a2?,…,an? (0≤∣ai∣≤1090 \leq |a_i| \leq 10^90≤∣ai?∣≤109),中间以空格分隔,分别表示这个序列每一部分的美味度。
输出描述:
在一行输出一个整数,表示吃完这个序列能获得的最大美味度的和。
题解:每吃掉一个数,其他数都会减1,问最后你能吃掉的最大数是多少,一道规律题,你减去的数是固定的是n(n-1),然后把
所有值算出来-去要减去的数就ok了
#include
#include
#include
#include
using namespace std;
typedef long long ll;
int a[100000+8];
int main()
{
ll i,j,k,n;
cin>>n;
ll sum=0;
for(i=0;i)
{
cin>>a[i];
sum+=a[i];
}
ll s1=0;
s1=((1+n-1)*(n-1))/2;
cout<s1;
return 0;
}
F.日期小助手
链接:https://ac.nowcoder.com/acm/contest/5278/F
来源:牛客网
作为一个关心父母的孩子,Compute 会在每年的母亲节和父亲节为父母准备礼物。可是粗心的他却不记得它们的具体日期了。
已知:母亲节在每年 5 月的第 2 个周日;父亲节在每年 6 月的第 3 个周日。
现在你需要告诉他,下一个(不包括当天)母亲节或父亲节是在什么时候。
输入描述:
第一行包含一个整数 T (T≤100T \leq 100T≤100),表示测试数据的组数。
对于每组数据,包含三个整数 y, m, d,中间以空格分隔,分别表示今天的年、月、日。
输入保证是一个在公元 2000 年 1 月 1 日 到 2100 年 12 月 31 日间的合法日期。
输出描述:
对于每组数据,在一行输出下一个需要准备礼物的节日和日期。格式参考样例输出。
示例1
输入
7
2000 1 1
2001 1 1
2002 1 1
2003 1 1
2020 1 1
2020 5 10
2020 6 21
输出
Mother‘s Day: May 14th, 2000
Mother‘s Day: May 13th, 2001
Mother‘s Day: May 12th, 2002
Mother‘s Day: May 11th, 2003
Mother‘s Day: May 10th, 2020
Father‘s Day: June 21st, 2020
Mother‘s Day: May 9th, 2021
题解:这题首先要知道2000年的的4月最后一天是星期几和5月最后一天是星期几,然后有个顺序就是第二年如果不是闰年就+1是闰年就+2,这样就可以
当年的父亲节和母亲节是什么时候,然后再进行判断下一个节日是母亲节还是父亲节,输出注意号数不同后面的字母也不同,我用map一个一个列出来- -。
#include
#include