• 配对——我那令人智熄的操作。


    配对

    题目描述:

    输入格式:

    输出格式:

    样例输入:

    3
    1 8
    2 5
    1 2

    样例输出:

    10

    提示:

    样例解释:

    如果作业时间8+2配对,5+5配对,最长时间为10;

    时间限制:1000ms
    空间限制:128MByte

    这题是不是看起来很简单,我刚开始也是这么觉得的。然后用我那超级无脑的操作来暴力了一下。

    #include<cmath>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,x,y,a[100000001],num=0,maxn=0;
    int main(){
    	cin>>n;
    	for (int i=1; i<=n; i++){
    		cin>>x>>y;
    		for (int l=1; l<=x; l++) a[num+l]=y;
    		num+=x;
    	}
    	sort(a+1,a+1+num);
    	for (int i=1; i<=num/2; i++){
    		if (a[i]+a[num-i+1]>maxn) maxn=a[i]+a[num-i+1];
    	}
    	cout<<maxn;
    	return 0;
    }
    

    然后。。用脚毛都可以想得到,爆零了。全都T了。然后我试了很多次。。。

    最终终于发现Y<=10^9!M<=10^9!。。貌似不可以sort,一sort就会T掉。然后连桶排都不行!因为M<=10^9!然后有了这个想法之后基本上人就傻了。什么?不能sort?那这个题目怎么写?然后就想了超级超级久!之后思路就开始往数学方向越飘越远,这题用数学方法怎么做?到了后来写出来的代码有多蠢我也就不说了。觉得看一下会更直观。

    #include<cmath>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,x,y,a[10000001],sum=0,num=0,maxn=0,mina=1e9;
    int main(){
    	cin>>n;
    	for (int i=1; i<=n; i++){
    		cin>>x>>y;
    		if (y>maxn) maxn=y;
    		if (y<mina) mina=y;
    		sum+=x;
    		num+=y*x;
    	}
    //	sort(a+1,a+1+num);
    	cout<<ceil(num/(sum/2.0));
    	return 0;
    }
    

    我还能说什么??exm?然后一次又一次地看题目,终于又看到了一个条件N<=100000,诶。N好小哦。好像是可以排序的诶。

    #include<cmath>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,maxn=0;
    struct nob{
    	int num,value;
    }a[100001];;
    bool mmp(nob a,nob b){
    	return a.value<b.value;
    }
    int main(){
    	cin>>n;
    	for (int i=1; i<=n; i++){
    		cin>>a[i].num>>a[i].value;
    	}
    	sort(a+1,a+1+n,mmp);
    	int head=1,tail=n;
    	while (head<=tail){
    		if (a[head].value+a[tail].value>maxn) maxn=a[head].value+a[tail].value;
    		int s=min(a[head].num,a[tail].num);
    		a[head].num-=s;
    		a[tail].num-=s;
    		if (a[head].num<=0) head++;
    		if (a[tail].num<=0) tail--;
    	}
    	cout<<maxn;
    	return 0;
    }
    

    我还能说什么!没错,你没有看错,此时距离考试开始已经过了两个小时。我居然花了两个小时在一个签到题上面!再见了,这个色彩斑斓的世界,再见了,这片天空。我日!我只能仰天长啸一句mmp。令人智熄的操作*1。

    made by cain-

  • 相关阅读:
    115. Distinct Subsequences
    91. Decode Ways
    72. Edit Distance
    python 输出 a+b
    求次小生成树
    判断最小生成树是否唯一
    二分法求最优值
    黑科技
    线段树+ 区间更新
    2018ICPC青岛赛区J题
  • 原文地址:https://www.cnblogs.com/cain-/p/7290188.html
Copyright © 2020-2023  润新知