1 条题解
-
0
题目分析
简化题意:数轴上有一动点 ,有 句话,其中
L x表示 ,G x表示 ,求最少的假话个数。大致思路:首先将每句话按 升序排列,再依次进行计算。
每次的计算方法如下:
设
L的序列为 ,长度为 ,G的序列为 ,长度为 ,当前位置的点 满足 ,则当前的假话数为 。一边枚举一边求最小值即可。
参考代码
本人的代码非常精简,欢迎借(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
- 上传者