ARC 102 | C - Triangular Relationship

6508 단어 경업자tech

문제.


https://atcoder.jp/contests/arc102/tasks/arc102_a

해법


질문문 아래.
a + b\equiv b + c\equiv c + a\equiv 0\(\bmod\K)
여기서 a+b\equivb+c에서 b를 빼면
a\equiv c\(\bmod\K)
대칭성보다는
a\equiv b\equiv c\(\bmod\K)
위의 내용을 활용하여 a+b\equiv0부터 시작하십시오.
a + b\equiv 2a\equiv 0\(\bmod\K)
여기서 K가 홀수일 때 2와 K는 서로 수수하기 때문에 a는 K로 나눌 수 있다.
만약 K가 짝수라면 K = 2K
2a\equiv 0\(\bmod\K)
2a\equiv 0\(\bmod\2K')
a\equiv 0\(\bmod\K')
대칭성보다는
a\equiv 0\(\bmod\K')
b\equiv 0\(\bmod\K')
c\equiv 0\(\bmod\K')
근거
a\equiv b\equiv c\equiv 0\(\bmod\K)
또 K=2K 때문에.
a\equiv b\equiv c\equiv K'\(\bmod\K)

코드


#include <bits/stdc++.h>

#include <atcoder/all>

using namespace std;
using namespace atcoder;
using ll = long long;
using ld = long double;
using uint = unsigned int;
using ull = unsigned long long;
const int MOD = 1e9 + 7;

int main() {
  ll n, k;
  cin >> n >> k;
  vector<ll> v(k);
  for (int i = 1; i <= n; i++) {
    v[i % k]++;
  }
  if (k % 2 == 0) {
    cout << v[0] * v[0] * v[0] + v[k / 2] * v[k / 2] * v[k / 2] << endl;
  } else {
    cout << v[0] * v[0] * v[0] << endl;
  }
}

참고 자료


https://atcoder.jp/contests/arc102/tasks/arc102_a/editorial

좋은 웹페이지 즐겨찾기