1 条题解

  • 0
    @ 2026-5-18 22:33:11

    题目分析

    简化题意:数轴上有一动点 PP,有 NN 句话,其中 L x 表示 PxP \leq xG x 表示 PxP \geq x,求最少的假话个数。

    大致思路:首先将每句话按 pip_i 升序排列,再依次进行计算。

    每次的计算方法如下:

    L 的序列为 aa,长度为 lalaG 的序列为 bb,长度为 lblb,当前位置的点 PP 满足 aiPai+1,bjPbj+1a_i \leq P \leq a_{i+1},b_j \leq P \leq b_{j+1},则当前的假话数为 i+lbji+lb-j

    一边枚举一边求最小值即可。

    参考代码

    本人的代码非常精简,欢迎借(chao)鉴(xi)。

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll n,x,y,z,a[1005],b[1005],i,j;char c;
    int main(){
    	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    	cin>>n;
    	for(i=0;i<n;i++){cin>>c>>z;if(c=='L')a[x++]=z;else b[y++]=z;}
    	//这里我开了两个数组,只开一个也能做,但两个数组更方便
    	sort(a,a+x);sort(b,b+y);
    	for(z=min(x,y),i=j=0;i<x&&j<y;){
    		if(a[i]<b[j])i++;else j++;
    		z=min(z,i+y-j);
    	}
    	cout<<z<<"\n";
    }
    
    • 1

    信息

    ID
    7031
    时间
    2000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    47
    已通过
    15
    上传者