1 条题解

  • 0
    @ 2025-8-24 21:16:00

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Igallta
    「この世には愛も知らない人が 沢山いるんですよ」

    搬运于2025-08-24 21:15:59,当前版本为作者最后更新于2024-01-28 21:38:05,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这道题嘛......

    知道田忌赛马小故事的就知道,这个故事的核心思路就是拿自己最慢的马去对战别人最快的马。我把这种马在下文称作“炮灰”。

    我们先来看样例给出的:

    如果多一点马?

    我的思路:给两个序列从小到大排序,如果我们当前马还没有别人当前最慢的马快,那就去当炮灰。否则就去当前最慢的马那里和它对战。

    但是由于炮灰这个操作并不会造成什么影响,只需要跳过当前马就行了。所以可以不用执行。我们只需要执行当这个马大于田忌当前最慢的马的时候去和它对战就行了。

    总结:

    1. 对我们和田忌的马的速度进行从小到大排序。
    2. 用两个指针 iijj 分别代表我们的马和田忌当前最慢的马的下标。
    3. 如果我们的第 ii 个马的速度大于等于田忌第 jj 个马(当前最慢的马)的速度,那么就让 j+1j+1ans+1ans+1
    4. 输出 ansans,代码结束。
    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=5e4+1;
    int n,a[N],b[N],ans;
    signed main(){
    	ios::sync_with_stdio(0);
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    	}
    	for(int i=1;i<=n;i++){
    		cin>>b[i];
    	}
    	sort(a+1,a+1+n);
    	sort(b+1,b+1+n);
    	for(int i=1,j=1;i<=n;i++){
    		if(a[i]>=b[j]){
    			++j,++ans;
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    
    • 1

    信息

    ID
    9628
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者