A. 蛋糕的最大美味
每次测试的时间限制2秒
每次测试的内存限制256兆字节
输入标准输入
输出标准输出
一条线上有n块蛋糕。第i块蛋糕的重量为ai(1≤i≤n)。
蛋糕的美味是相邻两块蛋糕的最大总重量(即max(a1+a2,a2+a3,...,an-1+an))。
你想使蛋糕的美味最大化。你最多可以做一次以下操作(做更多的操作会毁了蛋糕)。
选择蛋糕块的一个连续的子段a[l,r](1≤l≤r≤n),并将其倒置。
数组a的子段a[l,r]是序列al,al+1,...,ar。
如果你把它倒过来,数组将变成a1,a2,...,al-2,al-1,ar--,ar-1----,...--,al+1----,al--,ar+1,ar+2, ...,an-1,an。
例如,如果权重最初是[5,2,1,4,7,3],你可以把子段a[2,5]倒过来,得到[5,7-,4-,1-,2-,3]。现在蛋糕的美味程度是5+7=12(而在操作之前,美味程度是4+7=11)。
请找出最多进行一次操作后蛋糕的最大美味度。
输入
第一行包含一个整数t(1≤t≤50)--测试案例的数量。
每个测试用例的第一行包含一个整数n (2≤n≤1000) - 蛋糕的块数。
每个测试案例的第二行包含n个整数a1,a2,...,an (1≤ai≤109) - ai是第i块蛋糕的重量。
输出
对于每个测试案例,打印一个整数:在最多做一次操作后,蛋糕的最大美味。
注意
在第一个测试案例中,将子段a[2,5]反转后,你得到一个权重为[5,7-,4-,1-,2-,3]的蛋糕。现在蛋糕的美味程度是max(5+7,7+4,4+1,1+2,2+3)=12。这是一个人通过最多执行一次操作所能得到的蛋糕的最大可能的美味。
在第二个测试案例中,不做任何操作是最好的。味道是78+78=156。
在第三个测试案例中,在颠倒子段a[1,2]之后,你得到一个权重为[54---,69---,91]的蛋糕。现在蛋糕的美味度是max(54+69,69+91)=160。没有办法通过最多一次操作使蛋糕的美味程度大于160。
对于给出的数列肯定能反转区间使最大的和次大的数相邻,那我们只需要sort之后求出这两个书的和就ok了
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 1010;
int t;
int a[N];
int main()
{
cin >> t;
while(t --)
{
int n;
cin >> n;
for(int i = 1; i <= n; i ++) cin >> a[i];
sort(a + 1, a + n + 1);
cout << a[n] + a[n - 1] << endl;
}
return 0;
}
原题链接:https://codeforces.com/contest/1654/problem/B
分析:从前往后枚举每个字母
如果当前位置不是该字母最后出现的时刻,则它一定要被删除
如果当前位置是该字符出现的最后时刻,则无论如何怎样的前缀都不符合要求,结束
bool flag = true
是因为当有一个值是对的的时候利用布尔变量直接开始输出剩下的子串
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 30;
int t;
int f[N];
int main()
{
cin >> t;
while(t --)
{
string s;
cin >> s;
for(int i = 0; i < s.size(); i ++) f[s[i] - 'a'] = i;
bool flag = true;
for(int i = 0; i < s.size(); i ++)
{
if(flag)
{
if(f[s[i] - 'a'] != i) continue;
flag = false;
}
cout << s[i];
}
cout << '\n';
}
return 0;
}
聚聚能分享一下这是什么翻译软件吗
建议用deepl翻译器,我用的是edge自己带的浏览器,有时候会乱码,只是这几次没乱码
谢谢大佬!!