P2671 求和 求调
  • 板块题目总版
  • 楼主yrs2021
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/30 19:25
  • 上次更新2023/11/2 16:55:50
查看原帖
P2671 求和 求调
555002
yrs2021楼主2023/9/30 19:25

P2671 [NOIP2015 普及组] 求和

参照的是第二篇题解

爆零了,但是样例全过了……

#include<bits/stdc++.h>
#define mod 10007
using namespace std;
long long re,n,m,dp[2][100010][4],number[100010],ans;
char c;
int read(){
	re=0;
	c=getchar();
	while(c<'0'||c>'9'){
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		re=(re<<3)+(re<<1)+(c^48);
		c=getchar();
	}
	return re;
}
void write(int x){
	if(x/10){
		write(x/10);
	}
	putchar(x%10|48);
}
int main(){
	//freopen("P2671_1.in","r",stdin);
	n=read();
	m=read();
	for(int i = 1;i<=n;i++){
		number[i]=read();
	}
	for(int i = 1;i<=n;i++){
		int x;
		x=read();
		dp[i%2][x][3]++;
		if(dp[i%2][x][3]==2){
			ans+=(((dp[i%2][x][0]+number[i])%mod)*((dp[i%2][x][1]+i)%mod))%mod;
			ans%=mod;
		}
		dp[i%2][x][0]+=number[i];
		dp[i%2][x][0]%=mod;
		dp[i%2][x][1]+=i;
		dp[i%2][x][1]%=mod;
		if(dp[i%2][x][3]>2){
			ans+=(((dp[i%2][x][0]*i)%mod)+((dp[i%2][x][1]*number[i])%mod)+dp[i%2][x][2])%mod;
			ans%=mod;
		}
		dp[i%2][x][2]+=number[i]*i;
		dp[i%2][x][2]%=mod;
	}
	write(ans);
	return 0;
}

2023/9/30 19:25
加载中...