HELP ME~~~~~PleAseP1918
  • 板块学术版
  • 楼主yegengghost
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/1/17 21:22
  • 上次更新2023/10/24 03:47:44
查看原帖
HELP ME~~~~~PleAseP1918
791716
yegengghost楼主2023/1/17 21:22

求救P1918

(难不成它是依托答辩了)

#include<bits/stdc++.h>
using namespace std;
struct node//标记场地排序前和排序后 
{
	long long after_sort,before_sort;
}target[100000];
bool cmp(node a,node b)//. 
{
	return a.after_sort<b.after_sort;
}
int main()
{
	long long n,i,j,q,m;
	cin>>n;//场地数量 
	for(i=1;i<=n;i++) 
		cin>>target[i].after_sort,target[i].before_sort=i;
	sort(target+1,target+1+n,cmp);//排序,为后面二分查找做铺垫 
	cin>>q;//扔几次球 
	for(i=1;i<=q;i++)
	{
		cin>>m;//要打中的瓶数(找那个球场的瓶数与DL要扔的瓶数相同) 
		long long l=1,r=n,ans;//老套路,二分必备变量 
		while(l<=r)//高光二分查找 
		{
			long long mid=(l+r)/2;//中间值 
			if(target[mid].after_sort<=m)//值过小或正好是 
			{
				l=mid+1;//让最左边的比mid大,调整mid再二分 (*) 
				ans=target[i].before_sort;//记录答案,即场地编号 
			}
			else
				r=mid-1;//与 (*)同理 
		}
		if(target[ans].after_sort ==m)//找到这里有两种情况:排完序后的球场第ans项是DL要扔的场或不是 
			cout<<ans<<endl;//有相应的场就~~直接睡觉(×)~~直接输出(√) 
		else
			cout<<0<<endl;//没有相应的场就输出个球 
	}
	return 0;
}
//我这代码倒是很完美,但是它就是过不了样例(难不成它是依托答辩了) 
//求救P1918
//[火车站WA站]≈≈≈##############~#############~#########~(跪倒)######[火车站AC站] 
2023/1/17 21:22
加载中...