fork download
  1. #include<bits/stdc++.h>
  2. #define MAXN 10001
  3. using namespace std;
  4. typedef long long int ll;
  5. int n;
  6. ll a, b, c, d;
  7. ll in[MAXN], nex[MAXN];
  8. bool ff[MAXN];
  9. ll mul(ll p, ll q){
  10. if(q<1000000) return p*q%c;
  11. if(q%2==0) return mul(p,q/2)*2%c;
  12. return (mul(p,q/2)*2+p)%c;
  13. }
  14. ll dist(int p, int q){
  15. if(p>q){int tmp=p; p=q; q=tmp;}
  16. return ((mul(in[p],a) + mul(in[q],b))%c)^d;
  17. }
  18. int main()
  19. {
  20. int i, j;
  21. cin >> n;
  22. scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
  23. for(i=1; i<=n; i++) scanf("%lld",&in[i]);
  24. ll ans=0;
  25. int p=1;
  26. for(i=2; i<=n; i++) nex[i] = LLONG_MAX;
  27. for(i=1; i<n; i++){
  28. ff[p]=1;
  29. ll mini=LLONG_MAX; int minx=0;
  30. for(j=1; j<=n; j++){
  31. if(ff[j]) continue;
  32. nex[j] = min(nex[j], dist(p,j));
  33. if(mini > nex[j]){mini=nex[j]; minx=j;}
  34. }
  35. p = minx;
  36. ans += mini;
  37. }
  38. cout << ans;
  39. return 0;
  40. }
  41.  
Success #stdin #stdout 0s 5428KB
stdin
5
76 98 73 42
3 2 13 16 7
stdout
18