競技プログラミング日記

主に AtCoder の記事です

AtCoder Beginner Contest 165E問題

ABC165E

解法

\(l\)を偶奇で2つ取って,\(k\)を動かして \(\ (i+k,i+l-k)\ \) の形で選ぶ.

使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"

int main() {
  ll n,m;
  cin >> n >> m;


  vector<pll> ans;
  rep1(i,m/2){
    ans.emplace_back(i%n, (n-i)%n);
  }

  ll j = m/2 + 1;
  ll len = m;
  if(m % 2 == 0) len--;
  rep(i,ceil(m,2LL)){
    assert(len > 0);
    ans.emplace_back((i+j)%n, (i+j+len)%n);
    len -= 2;
  }

  // assert(ans.size() == m);
  for(auto [i,j]: ans){
    cout << i+1 << " " << j+1 << endl;
  }
 
  return 0;
}