社区讨论
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 条回复,欢迎继续交流。
正在加载回复...