洛谷 P2671 求和
2024-08-29 11:26:51
思路分析
直接暴力肯定是不行的,我们需要把各种相同的颜色分离出来计算。
但是只分离出来没有用,因为三元组要求中间有一个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;
}
最新文章
- Reverse Core 第二部分 - 13章 - PE文件格式
- sqlserver数据库 Schema
- sys.dm_tran_locks,
- winddows 运行指令 (2)
- SendMessage
- android动画的Interpolator
- 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
- 【转】oracle job相关内容
- 深入分析 Java 中的中文编码问题(转)
- sublime2 Ctags 快捷键
- Qt浅谈之四十九俄罗斯方块(代码来自网络)
- include与jsp:include区别
- 大数据之HBase
- 全文检索选择-------- Elasticsearch与Solr
- SpringBoot简单打包部署(附工程)
- Identity Server 4登陆后返回登录前页面
- 初探设计模式5:Spring涉及到的9种设计模式
- 5-23 CSS知识的补充
- 在见证了1000多家公司的兴衰灭亡之后,YC创始合伙人总结了创业公司的6个不死法则(转)
- MySQL主从报错1594
热门文章
- mysql 更改root密码
- INS-13001—win10系统安装oracle11g时遇到INS-13001环境不满足最低要求
- Database time zone version is 18. It is older than current release time zone version 26
- 不同格式图片相互转换的开源库分享(使用CxImage,并有VC6的配置过程)
- 开启Qt Lite Project
- GetParent、SetParent、MoveWindow - 获取、指定父窗口和移动窗口,IsChild - 判断两个窗口是不是父子关系
- DLL中类的显式链接(用虚函数进行显式链接)
- 编译 Qt 5.6(使QtWebEngine支持XP)
- Delphi 中 断言 Assert 用法
- Java代码消除switch/case,if/else语句的几种实现方式