思路分析

直接暴力肯定是不行的,我们需要把各种相同的颜色分离出来计算。

但是只分离出来没有用,因为三元组要求中间有一个y。可以看出,x和z的奇偶性相同时,存在y使三元组成立。

所以我们用两个数组存储相同颜色的奇、偶情况,每次计算就变成计算这个序列的值。

则原式=(num[1]+num[2])*(a[num[1]]+a[num[2])+(num[1]+num[3])*(a[num[1]]+a[num[3])+(num[1]+num[4])*(a[num[1]]+a[num[4])+

    ...+(num[2]+num[3])*(a[num[2]]+a[num[3])+(num[2]+num[4])*(a[num[2]]+a[num[4])+

    ...+(num[n-1]+num[n])*(a[num[n-1]]+a[num[n])

其中,num[1]*a[num[1]]这个值被计算了n-1次,num[1]乘其他a[num[2]],a[num[3]],a[num[4]]……都为一次。

   num[2]*a[num[2]]这个值被计算了n-2次,num[1]乘其他a[num[1]],a[num[3]],a[num[4]]……都为一次。

以此类推。

代码

#include<iostream>
#include<vector>
#include<cmath> using namespace std; long long n,m,a[],ans=;
//数据比较大,用longlong
vector<long long> even[],odd[];
//使用变长数组存储 int ad(int pt)
{ long long count=,ep=even[pt].size(),op=odd[pt].size(),s=;
for(int i=;i<=ep;i++)
{
s=(s+a[even[pt][i-]])%;//所有值的总和
}
for(int i=;i<=ep;i++)
{
count+=(s%+(ep-)*(a[even[pt][i-]]%))%*even[pt][i-]%;
count%=;
//一定要边/边%!
} s=;
for(int i=;i<=op;i++)
{
s=(s+a[odd[pt][i-]])%;
}
for(int i=;i<=op;i++)
{
count+=(s%+(op-)*(a[odd[pt][i-]]%))%*odd[pt][i-]%;
count%=;
} return count;
} int main()
{
long long cl;
cin>>n>>m;
for(int i=;i<=n;i++)
{
cin>>a[i];
}
for(int i=;i<=n;i++)
{
cin>>cl;
if(i&)
odd[cl].push_back(i);
else
even[cl].push_back(i);
}
for(int i=;i<=m;i++)
{
ans+=ad(i);
ans%=;
}
cout<<ans;
}

最新文章

  1. Reverse Core 第二部分 - 13章 - PE文件格式
  2. sqlserver数据库 Schema
  3. sys.dm_tran_locks,
  4. winddows 运行指令 (2)
  5. SendMessage
  6. android动画的Interpolator
  7. Oracle RAC 11.2.0.4 – RHRL 6.4: DiskGroup resource are not running on nodes. Database instance may not come up on these nodes
  8. 【转】oracle job相关内容
  9. 深入分析 Java 中的中文编码问题(转)
  10. sublime2 Ctags 快捷键
  11. Qt浅谈之四十九俄罗斯方块(代码来自网络)
  12. include与jsp:include区别
  13. 大数据之HBase
  14. 全文检索选择-------- Elasticsearch与Solr
  15. SpringBoot简单打包部署(附工程)
  16. Identity Server 4登陆后返回登录前页面
  17. 初探设计模式5:Spring涉及到的9种设计模式
  18. 5-23 CSS知识的补充
  19. 在见证了1000多家公司的兴衰灭亡之后,YC创始合伙人总结了创业公司的6个不死法则(转)
  20. MySQL主从报错1594

热门文章

  1. mysql 更改root密码
  2. INS-13001—win10系统安装oracle11g时遇到INS-13001环境不满足最低要求
  3. Database time zone version is 18. It is older than current release time zone version 26
  4. 不同格式图片相互转换的开源库分享(使用CxImage,并有VC6的配置过程)
  5. 开启Qt Lite Project
  6. GetParent、SetParent、MoveWindow - 获取、指定父窗口和移动窗口,IsChild - 判断两个窗口是不是父子关系
  7. DLL中类的显式链接(用虚函数进行显式链接)
  8. 编译 Qt 5.6(使QtWebEngine支持XP)
  9. Delphi 中 断言 Assert 用法
  10. Java代码消除switch/case,if/else语句的几种实现方式