社区讨论

90分,求大佬看看这个思路是否可以优化?

P2671[NOIP 2015 普及组] 求和参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo7vmup3
此快照首次捕获于
2023/10/27 08:30
2 年前
此快照最后确认于
2023/10/27 08:30
2 年前
查看原帖
用map存相同颜色的格子
CPP
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/hash_policy.hpp>
#include <bits/stdc++.h>
#define int long long
#pragma GCC optimize(1000)
using namespace std;
using namespace __gnu_pbds;
const int MOD=10007;
struct House
{
	int color,num,id;
} a[100100];
gp_hash_table<int,int> c;
gp_hash_table<int,int>::iterator it;
int n,m;
bool cmp(House a,House b)
{
	if (a.color==b.color)
		return a.id<b.id;
	return a.color<b.color;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin >> n >> m;
	for (register int i=1;i<=n;i++)
	{
		cin >> a[i].num;
		a[i].id=i;
	}
	for (register int i=1;i<=n;i++)
	{
		cin >> a[i].color;
		c[a[i].color]++;
	}
	sort(a+1,a+n+1,cmp);
	int cur=1,ans=0;
	for (it=c.begin();it!=c.end();it++)
	{
		cur=cur+it->second;
		if (it->second>=2)
			for (register int xx=cur-it->second;xx<=cur-2;xx++)
				for (register int zz=xx+1;zz<=cur-1;zz++)
					if (a[xx].id%2==a[zz].id%2)
					{
						int x=a[xx].id,z=a[zz].id,y=(x+z)/2;
						if (x<y&&y<z)
						{
							ans+=(x+z)*(a[xx].num+a[zz].num);
							ans%=MOD;
						}
					}
	}
	cout << ans << endl;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...