【模拟】签订协议

战争尾声

https://ac.nowcoder.com/acm/contest/11038/A

签订协议

nowcoder 217601

题目大意

给出n个数,现在有一个协议书,让你从1传到n,然后传回1,继续传下去
对于第i个数,如果前面i-1个数已经匹配过了,那么当协议书传过来时即可匹配,否则无法匹配
我让你让所有数匹配最少传多少圈(向上取整)

解题思路

如果直接暴力枚举会TLE
当匹配完值为的点后需要匹配值为的点
那么可以按排序,这样得到匹配的数的顺序
为当前数的初始位置
如果那么不用多传一圈
否则要多传一圈

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int n, ans;
struct node
{
    int v, s;
}a[800010];
bool cmp(node x, node y)
{
    return x.s > y.s;//按给出的值排序
}
int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
    {
        scanf("%d", &a[i].s);
        a[i].v = i;//记录初始位置
    }
    sort(a + 1, a + 1 + n, cmp);//排序
    for (int i = 2; i <= n; ++i)
        if (a[i].v < a[i - 1].v)//要多传一圈
            ans++;
    ans++;//不满一圈的
    printf("%d", ans);
    return 0;
}
全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务