fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. void scoreDifference(vector<int> &arr, int n){
  5. vector<int> a(n+1, 0);
  6. vector<int> k(n+1, 0);
  7.  
  8. long long total_sumA = 0, total_sumK = 0;
  9. long long ac = 0, kc = 0;
  10. for (int i = 0; i < n; i++){
  11. if(arr[i] == 1){
  12. a[i+1] = 1;
  13. total_sumA += i+1;
  14. ac++;
  15. }
  16. else if(arr[i] == 2){
  17. k[i+1] = 1;
  18. total_sumK += i+1;
  19. kc++;
  20. }
  21. else if(arr[i] == 3){
  22. a[i+1] = 1;
  23. k[i+1] = 1;
  24. total_sumA += i+1;
  25. total_sumK += i+1;
  26. ac++;
  27. kc++;
  28. }
  29. }
  30.  
  31.  
  32. long long sum_of_arshi = 0, count_of_arshi = 0;
  33. long long sum_of_krypto = 0, count_of_krypto = 0;
  34. for (int line = 1; line <= n; line++){
  35. if(a[line] == 1){
  36. sum_of_arshi += line;
  37. count_of_arshi++;
  38. }
  39.  
  40. long long left_sumA = (count_of_arshi * line) - (sum_of_arshi);
  41. long long right_sumA = (total_sumA - sum_of_arshi) - (ac - count_of_arshi)*line;
  42.  
  43. long long Arshi = left_sumA + right_sumA;
  44.  
  45. if(k[line] == 1){
  46. sum_of_krypto += line;
  47. count_of_krypto++;
  48. }
  49.  
  50. long long left_sumK = (count_of_krypto * line) - (sum_of_krypto);
  51. long long right_sumK = (total_sumK - sum_of_krypto) - (kc - count_of_krypto)*line;
  52.  
  53. long long Krypto = left_sumK + right_sumK;
  54.  
  55.  
  56. cout << abs(Arshi - Krypto) << endl;
  57.  
  58. }
  59.  
  60. }
  61.  
  62. int main() {
  63. // your code goes here
  64. int t; cin >> t;
  65. while(t--){
  66. int x, n; cin >> x >> n;
  67. vector<int> arr(n);
  68. for (int &i : arr){
  69. cin >> i;
  70. }
  71.  
  72. scoreDifference(arr, n);
  73. }
  74.  
  75.  
  76. return 0;
  77. }
Success #stdin #stdout 0.01s 5288KB
stdin
2
1 5
2 1 3 0 1
1 8
1 1 3 0 2 0 3 3
stdout
5
2
1
0
1
3
2
1
4
7
8
9
10