ã¡ãã£ã¨å·¥å¤«ãå¿ è¦ãªæã
åé¡æ¦è¦
é·ã æ£æ´æ°å
ã¨ãæ£ã®æ´æ°
ãä¸ããããã
æ°åã®åºéã§ãã£ã¦ãç·åã ã§å²ã£ãä½ãã¨ãåºéå
ã«å«ã¾ããè¦ç´ ã®åæ°ã¨ãçãããã®ã®åæ°ãæ±ããã
å¶ç´
èãããã¨
çµæ§ããããããè½ã¡çãã¦æ¡ä»¶ãæ´çãããï¼ï¼
ã¾ãã0-indexed ã§èãããã¨ã«ãã¦ãæ°å ã®ç´¯ç©åã
ã¨ãããããã®ã¨ããåé¡ã¯æ¬¡ã®ããã«å解éã§ããã
é·ã ã®æ°å
ãä¸ããããã
ã
ã§å²ã£ãä½ãã
ã«ä¸è´ãã
ã¨ããæ¡ä»¶ãæºãã ã®çµã®åæ°ãæ±ããã
ããã§ããã ã§ãããã¨ãä¿è¨¼ããããªãã°ã話ã¯æ©ãã¦ã
â
ãæºãããã㪠ãæ±ããã°ããã¦ã
map
ãç¨ãã¦èªç¶ã«è§£ããã
ããã¦ã ã¨ãªããã¨ãããå¾ãã¨ãã¦ããå°ãèãã¦ã¿ãã°ãçµå±ã次ã®æ¡ä»¶ãæºãã
ã®çµã®åæ°ãæ±ããã°ãããã¨ããããã
ãããæ±ããããã«ã¯ã ã«å¯¾ãã¦ã
ãæºãã ã®åæ°ãæ±ãããã®å¤ã足ãã¦ããã°ããããã®æä½ã¯ããã¯ã
map
ãç¨ãã¦ã§ãããè¨ç®é㯠ã¨è©ä¾¡ã§ããã
ã³ã¼ã
#include <bits/stdc++.h> using namespace std; // Sj - Si â¡ j - i mod K ã㤠j - i < K // Si - i â¡ Sj - j mod K ã㤠j - i < K int main() { long long N, K; cin >> N >> K; vector<long long> A(N), S(N+1, 0); for (int i = 0; i < N; i++) { cin >> A[i]; S[i+1] = S[i] + A[i]; } long long res = 0; map<long long, long long> nums; for (int j = 0; j <= N; j++) { long long rj = ((S[j] - j) % K + K) % K; res += nums[rj]; // S[j] ã追å nums[rj]++; // j - i = K ã¨ãªã i ãåé¤ int i = j - (K - 1); if (i >= 0) { long long ri = ((S[i] - i) % K + K) % K; nums[ri]--; if (nums[ri] == 0) nums.erase(ri); } } cout << res << endl; }
ãæºãã ã®åæ°ã