Farmer John 的奶牛正在 mooZ 视频会议平台上举行每日集会。
她们发明了一个简单的数字游戏,为会议增添一些乐趣。
Elsie 有三个正整数 A、B 和 C (A≤B≤C)。
这些数字是保密的,她不会直接透露给她的姐妹 Bessie。
她告诉 Bessie 七个范围在 1…109 之间的整数(不一定各不相同),并宣称这是 A、B、C、A+B、B+C、C+A 和 A+B+C 的某种排列。
给定这七个整数,请帮助 Bessie 求出 A、B 和 C。
可以证明,答案是唯一的。
输入格式
输入一行,包含七个空格分隔的整数。
输出格式
输出 A、B 和 C,用空格分隔。
数据范围
1≤所有输入的整数≤109
输入样例:
2 2 11 4 9 7 9
输出样例:
2 2 7
给原牛文串定一个数字顺序,那么可以把当前字母标一个在原文位置的下标,可以用cnt++来从1/0 到 size ,在下面一串的字符中可以找到相邻两个字符的顺序,如果不符合升序,那么res++。
这类问题其实在最长上升子序列,merge_sort (洛谷中,火柴盒排列那道离散化排序题)也有涉及其思想
因此创建一个原始顺序表,方便找到打乱后的原始下标,之后就可以比较大小,或是找到对应位置得到交换次数等等
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;
const int N =1005;
string s1,s2;
int s[27];
int main()
{
string s1;
cin>>s1;
int cnt = 0;
for(int i=0;i<s1.size();i++)
{
s[s1[i] - 'a'] = cnt ++ ;
}
string s2;
cin>>s2;
int res=1;
for(int i=1;i<s2.size();i++)
{
if(s[ s2[i] - 'a'] <= s[ s2[i-1] - 'a'] )
{
res++;
continue;
}
}
cout<<res;
return 0;
}