不好的暴力,是我小脑旋转
查看原帖
不好的暴力,是我小脑旋转
827018
zhouzihang1楼主2024/3/25 20:05

评测记录

不用AC,帮我多过几个点就可以。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1.5e4+10,M=4e4+10;
int n,m,t[N],x[M],ans[N][5];
vector<int> num;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&x[i]);
		t[x[i]]++;
	}
	num.push_back(-1);
	for(int i=1;i<=n;i++)
		if(t[i]) num.push_back(i);
	int len=num.size()-1;
	for(int i=1;i<=len-3;i++)
		for(int j=i+1;j<=len-2;j++)
		{
			int k=upper_bound(num.begin(),num.end(),4*num[j]-3*num[i])-num.begin();
			for(;(num[j]-num[i])%2==0&&k!=-1&&k<=len-1;k++)
			{
				int A=num[i],B=num[j],C=num[k],D=(num[j]-num[i])/2+num[k];
				if(C==-1||D>n||D<=C||C<=B||B<=A||!t[C]||!t[D]) continue;
//				printf("%d %d %d %d\n",A,B,C,D);
				int Max=max(t[A],max(t[B],max(t[C],t[D])));
				ans[A][1]+=Max-t[A]+1;ans[B][2]+=Max-t[B]+1;ans[C][3]+=Max-t[C]+1;ans[D][4]+=Max-t[D]+1;
			}
		}
	for(int i=1;i<=m;i++)
		printf("%d %d %d %d\n",ans[x[i]][1],ans[x[i]][2],ans[x[i]][3],ans[x[i]][4]);
	return 0;
}
2024/3/25 20:05
加载中...