fork download
  1. #include<bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define pp push_back
  5. #define endl '\n'
  6. #define all(x) x.begin(),x.end()
  7. #define ld long double
  8. #define PI acos(-1)
  9. #define ones(x) __builtin_popcountll(x)
  10. //#define int ll
  11.  
  12. using namespace std;
  13.  
  14. void Drakon() {
  15. ios_base::sync_with_stdio(false);
  16. cin.tie(nullptr);
  17. cout.tie(nullptr);
  18. #ifdef Clion
  19. freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
  20. #endif
  21. }
  22.  
  23. unsigned long long inf = 1e10;
  24. const double EPS = 1e-6;
  25. const int MOD = 1000000007, N = 200005, LOG = 25;
  26.  
  27. ll mul(const ll &a, const ll &b) {
  28. return (a % MOD + MOD) * (b % MOD + MOD) % MOD;
  29. }
  30.  
  31. ll add(const ll &a, const ll &b) {
  32. return (a + b + 2 * MOD) % MOD;
  33. }
  34.  
  35. ll pw(ll x, ll y) {
  36. ll ret = 1;
  37. while (y > 0) {
  38. if (y % 2 == 0) {
  39. x = mul(x, x);
  40. y = y / 2;
  41. } else {
  42. ret = mul(ret, x);
  43. y = y - 1;
  44. }
  45. }
  46. return ret;
  47. }
  48.  
  49. void solve() {
  50. int n, m;
  51. cin >> n >> m;
  52. set<int> s;
  53. for (int i = 0; i < m; ++i) {
  54. int x;
  55. cin >> x;
  56. s.insert(x);
  57. }
  58. vector<int> vec;
  59. for(auto x : s) vec.push_back(x);
  60. int ans = 1e9;
  61. vector<int> par[2];
  62. for(auto x : vec) {
  63. par[x%2].push_back(x);
  64. }
  65. if(min(par[0].size(), par[1].size()) >= 2) {
  66. cout << "NO\n";
  67. return;
  68. }
  69. if(par[0].empty()) {
  70. ans = min(ans, n - par[1][0]);
  71. for (int i = 0; i < par[1].size(); ++i) {
  72. if(par[1].size() >= 2) {
  73. int mn = (!i ? par[1][1] : par[1][0]);
  74. if(par[1][i] - 1 >= n - mn && (par[1][i] - 1) % 2 == (n - mn) % 2) {
  75. ans = min(ans, par[1][i] - 1);
  76. }
  77. }
  78. else {
  79. ans = min(ans, par[1][0] - 1);
  80. }
  81. }
  82. }
  83. if(par[1].empty()) {
  84. ans = min(ans, n - par[0][0]);
  85. for (int i = 0; i < par[0].size(); ++i) {
  86. if(par[0].size() >= 2) {
  87. int mn = (!i ? par[0][1] : par[0][0]);
  88. if(par[0][i] - 1 >= n - mn && (par[0][i] - 1) % 2 == (n - mn) % 2) {
  89. ans = min(ans, par[0][i] - 1);
  90. }
  91. }
  92. else {
  93. ans = min(ans, par[0][0] - 1);
  94. }
  95. }
  96. }
  97. if(par[0].size() == 1 && !par[1].empty()) {
  98. if(par[0][0] - 1 >= n - par[1][0] && (par[0][0] - 1) % 2 == (n - par[1][0]) % 2) {
  99. ans = min(ans, par[0][0] - 1);
  100. }
  101. }
  102. if(par[1].size() == 1 && !par[0].empty()) {
  103. if(par[1][0] - 1 >= n - par[0][0] && (par[1][0] - 1) % 2 == (n - par[0][0]) % 2) {
  104. ans = min(ans, par[1][0] - 1);
  105. }
  106. }
  107. if(ans == 1e9) {
  108. cout << "NO\n";
  109. return;
  110. }
  111. cout << "YES\n" << ans << endl;
  112. }
  113.  
  114. signed main() {
  115. Drakon();
  116. int t = 1;
  117. cin >> t;
  118. while (t--) {
  119. solve();
  120. }
  121. }
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
YES
-1494923040