10分求教,提前Orz
查看原帖
10分求教,提前Orz
107318
爱挨打的豆豆楼主2020/10/4 11:44

求助dalao

我的思路:在输入时预处理,记录每个价格低于承受范围的咖啡馆以及其左边各种颜色的旅馆数量,再从右边往左推,选择最近的标记点并加入答案,直到检测到下一个点时更新为下个点,以此类推

求各位大佬指教

#include<bits/stdc++.h>
using namespace std;
int kind[51],book[200001][52]={0},a[200001];
int main(){
	int n,k,p,num=0,ans=0,money;
	cin>>n>>k>>p;
	for(int i=1;i<=k;i++)
		kind[i]=0;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>money;
		kind[a[i]]++;
		if(money<=p){
			num++;
			book[num][51]=i;
			for(int j=0;j<=k;j++)
				book[num][j]=kind[j];
		}
	}
	for(int i=n;i>=1;i--){
		if(i==book[num][51])
			num--;
		ans+=book[num][a[i]];
		if(num==0){
			cout<<ans;
			return 0;
		}
	}
	return 0;
}

提前%%%%%%%%%%%%%%%%%%%%%%%

2020/10/4 11:44
加载中...