作者:520Enterprise
链接:https://ac.nowcoder.com/discuss/335697?type=101&order=0&pos=1&page=1
来源:牛客网
#include<cmath>
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<set>
#include<vector>
#include<bitset>
#define int __int128
#define ll __int128
using namespace std;
const int maxn=300005;
const long long mod=1e9+7;
int n;
ll k,sum,a[maxn],shika[maxn],f1,f2,f3,erci,yici,changshu;
map<ll,ll>pre;
inline ll read()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
inline void write(ll a)
{
if(a<0)
{
char a='-',b='1';
putchar(a);
putchar(b);
}
else
{
if(a>=10)
write(a/10);
putchar(a%10+'0');
}
}
void jiefangcheng(int f1,int f2,int f3)
{
erci=(f3+f1-2*f2)/2;
erci%=mod;
yici=f2-f1-3*erci;
yici%=mod;
changshu=f1-erci-yici;
changshu%=mod;
}
signed main()
{
n=read(),k=read();
for(int i=1;i<=n;++i)
a[i]=a[i+n]=a[i+2*n]=read();
for(int i=1;i<=3*n;++i)
{
if(pre.find(a[i])==pre.end())
pre[a[i]]=0;
shika[i]=(shika[i-1]+pre[a[i]])%mod;
// cout<<shika[i]<<' ';
sum=(sum+i*(i+1)/2-shika[i])%mod;
if(i==n)
f1=sum;
if(i==2*n)
f2=sum;
if(i==3*n)
f3=sum;
pre[a[i]]=i;
}
jiefangcheng(f1,f2,f3);
// cout<<f1<<' '<<f2<<' '<<f3<<endl;
// cout<<erci<<' '<<yici<<' '<<changshu<<endl;
write(((erci*k%mod*k%mod+yici*k%mod+changshu)%mod+mod)%mod);
return 0;
}
90分求助