how CF1855C
  • 板块学术版
  • 楼主ZZQF5677
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/7/30 21:45
  • 上次更新2023/11/3 06:50:29
查看原帖
how CF1855C
482347
ZZQF5677楼主2023/7/30 21:45

https://codeforces.com/contest/1855/problem/C1

https://codeforces.com/contest/1855/problem/C2

主要问题:

1
5
1 2 -4 3 -10
7
1 5
2 5
4 5
4 5
3 5
2 5
1 5

这个答案为什么不可以啊(甚至是test 1中的wrong answer array is not sorted after all the moves (test case 5))

// CF1855C | 20230729 | T3
#include <bits/stdc++.h>
using namespace std;
int t;
int n, a[25];
int fadd = 0, zadd = 0, fnum = 0, znum = 0;
int zzmax = -1, ffmin = 1;
int zzid, ffid;
queue<pair<int, int> > ans;
void z_solve() {
  for (int i = 2; i <= n; i++) {
    if (a[i - 1] <= a[i]) {
      continue;
    } else {
      int minn = 1000000000, id = 0;
      for (int j = 1; j <= n; j++) {
        if (a[i - 1] <= a[i] + a[j]) {
          minn = min(minn, a[j]);
          id = j;
        }
      }
      // if (id == 0) {
      //   cout << "==\n";
      // }
      a[i] += minn;
      ans.push({i, id});
    }
  }
}
void f_solve() {
  for (int i = n - 1; i >= 1; i--) {
    if (a[i] <= a[i + 1]) {
      continue;
    } else {
      int maxx = -1000000000, id = 0;
      for (int j = 1; j <= n; j++) {
        if (a[i] + a[j] <= a[i + 1]) {
          maxx = max(maxx, a[j]);
          id = j;
        }
      }
      // if (id == 0) {
      //   cout << "--\n";
      // }
      a[i] += maxx;
      ans.push({i, id});
    }
  }
}
void f_turn_z() {
  for (int i = 1; i <= n; i++) {
    if (zzmax <= abs(ffmin)) {
      zzmax += zzmax;
      a[zzid] += a[zzid];
      ans.push({zzid, zzid});
    } else {
      break;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (a[i] < 0) {
      a[i] += a[zzid];
      ans.push({i, zzid});
    }
  }
  z_solve();
}
void z_turn_f() {
  for (int i = 1; i <= n; i++) {
    if (abs(ffmin) <= zzmax) {
      ffmin += ffmin;
      a[ffid] += a[ffid];
      ans.push({ffid, ffid});
    } else {
      break;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (a[i] > 0) {
      a[i] += a[ffid];
      ans.push({i, ffid});
    }
  }
  f_solve();
}
int main() {
  cin >> t;
  while (t--) {
    while (!ans.empty()) {
      ans.pop();
    }
    cin >> n;
    zzmax = -1, ffmin = 1;
    fadd = zadd = fnum = znum = 0;
    for (int i = 1; i <= n; i++) {
      cin >> a[i];
      if (a[i] >= 0) {
        zadd += a[i];
        znum++;
      } else {
        fadd += a[i];
        fnum++;
      }
      // zzmax = max(zzmax, a[i]);
      if (a[i] > zzmax) {
        zzmax = a[i];
        zzid = i;
      }
      // ffmin = min(ffmin, a[i]);
      if (a[i] < ffmin) {
        ffmin = a[i];
        ffid = i;
      }
    }
    // cout << zzid << "----------\n";
    // cout << ffid << "----------\n";
    if (fnum == 0) {
      z_solve();
    } else if (znum == 0) {
      f_solve();
    } else {
      if (abs(zadd) >= abs(fadd)) {
        f_turn_z();
      } else {
        z_turn_f();
      }
    }
    cout << ans.size() << "\n";
    while (!ans.empty()) {
      cout << ans.front().first << " " << ans.front().second << "\n";
      ans.pop();
    }
  }
  return 0;
}
2023/7/30 21:45
加载中...