期末预测之最佳阈值【202012-2】

期末预测之最佳阈值

#include<iostream>
#include<algorithm>
using namespace std;
//两重循环超时,采用每次循环找比自己大的1的个数和比自己小的0的个数 


int pk[100000001];//存放相同的theta的个数,有两个相同则为1,三个相同则为2 
typedef struct {//存放y和结果 
	int theta;
	int result;
}Node;
 
bool cmp(Node a,Node b){
		return a.theta<b.theta;
}
 
int main(){
	int m;
	cin >>m;
	Node pp[100005];
	for(int i =0;i<m;i++)
	{
		cin >>pp[i].theta>>pp[i].result;
	 }
	 sort(pp,pp+m,cmp);//从小到大 
	 int temp1=0;
	 int p1[100005];
	for(int i=m-1;i>=0;i--)//寻找>=自己且为1的个数 
	{
		if(pp[i].result==1)
		{
			temp1+=1;
		}
		p1[i]=temp1;
	}
	int temp0=0;
	int p0[100005];
	for(int i =1;i<m;i++)//寻找<自己且为0的个数 
	{
		if(pp[i-1].theta==pp[i].theta&&pp[i-1].result!=pp[i].result)
		{
			pk[pp[i].theta]+=1;//如果和上一个theta相同但结果不同,则相同数加一 
		}
		if(pp[i-1].result==0)
		{
			temp0+=1;
		}
		p0[i]=temp0-pk[pp[i].theta];//要减去相同的个数 
	}
	int dex=0;
	int sum=0;
	for(int i =0;i<m;i++)//寻找预测正确最多的数 
	{
		if(p1[i]+p0[i]>=sum)
		{
			sum=p1[i]+p0[i];
			dex=pp[i].theta;
		}
	}
	cout <<dex<<endl;
}//2021.1.16 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值