求巨佬指点迷津(set用法)
查看原帖
求巨佬指点迷津(set用法)
634119
DragonMeng楼主2022/3/6 11:47
#include<bits/stdc++.h>
using namespace std;
int b[10010000];
int main(void)
{
    int n;
    cin>>n;//组数
    for(int i=0;i<n;i++)
    {
	int a;
	cin>>a;//一组数据的总数
        set<int> s; 
	for(int j=1;j<=a;j++)
	{
         int cao;
	 cin>>cao;
	 if(s.count(cao)==1)
 //先判断输入的cao是否之前输入过
	 {
          b[j]==0;//如果是,则最小值为0
          continue;
	 }
	s.insert(cao);//如果不是则存入set
	if(j==1) 
        {
	b[1]=cao;
        }
        else
	{
	set<int>::iterator it,ix,iy;
	ix=s.begin();
	iy=s.end();		
        iy--;
   ix,iy即是边缘数,ix为第一个,iy为最后一个     
	if(cao==*iy)
	{
	iy--;
    //如果输入的cao最大,则用cao减去前一个数
	b[j]=cao-*iy;
	}
	else if(cao==*ix)
	{
	ix++;
	b[j]=*ix-cao;
   //同理,最小时用后一个数减cao 
	}
	else
	{
	int zuo,you;
	it=s.upper_bound(cao);
  //不然it为cao的前一个数
	you=*it-cao;//cao和右边最近数的差
	it--;
	it--;
   //现在it是cao左边最近数 
        zuo=cao-*it;
	b[j]=min(zuo,you);//取最小
	}
	}
	}
	int ans=0;
        for(int qaq=1;qaq<=a;qaq++)
	{
	ans=ans+b[qaq];//相加b数组的和
	}
	cout<<ans<<endl;//输出并且进入下一个
	}
}

展示的有点小问题希望不要介意

刚看的set用法,可能有点麻烦

样例过了但是全WA

2022/3/6 11:47
加载中...