放养但没有完全放养(两序列相对位置题)

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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值