1、最小值
1.1 AC代码
求三个数的最小值,可以用嵌套min函数
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int a,b;
cin>>a>>b;
cout<<min(min(a,b),(a+b)/3)<<endl;
}
return 0;
}
2、压缩文件
2.1 思路
1、先注意开long long,后续sort中也要写LL
2、注意分三种情况:
压缩前容量就够用,没有压缩的必要了
全部压缩后,容量也不够用,压缩了也没用
压缩一部分就可以了,先压缩那种<压缩前后差距大的文件>
2.2 AC代码
//压缩文件
#include<iostream>
#include<cstring>//气死,刚才忘记开cstring一直错
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int N=1e6;
LL a[N],b[N],c[N];
LL sum1=0,sum2=0;
int main()
{
LL n,m;//n个文件,容纳空间是m
cin>>n>>m;
for(int i=0; i<n; i++)
{
cin>>a[i]>>b[i];//压缩前、压缩后的空间
c[i]=a[i]-b[i];
sum1+=a[i];
sum2+=b[i];
}
if(sum1<=m)//压缩前容量就够用
{
cout<<0<<endl;
return 0;
}
else if(sum2>m)//全部压缩后,容量也不够用
{
cout<<-1<<endl;
return 0;
}
else//可以压缩一部分
{
//一定注意不要习惯性写成greater<int>(),这个bug找得我人都麻了
sort(c,c+n,greater<LL>());//降序排列
for(int i=0; i<n; i++)
{
sum1-=c[i]; //先压缩这种<压缩前后差距大的文件>
if(sum1<=m)//当压缩到刚好<=容量的时候,就完成了
{
cout<<i+1<<endl;//别忘了+1,因为数组下标从0开始
return 0;
}
}
}
}
3、最小移动距离
基环树,不会哇呜呜