λ¬Έμ : https://www.acmicpc.net/problem/10986
10986λ²: λλ¨Έμ§ ν©
μ Nκ° A1, A2, ..., ANμ΄ μ£Όμ΄μ§λ€. μ΄λ, μ°μλ λΆλΆ ꡬκ°μ ν©μ΄ MμΌλ‘ λλμ΄ λ¨μ΄μ§λ ꡬκ°μ κ°μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€. μ¦, Ai + ... + Aj (i ≤ j) μ ν©μ΄ MμΌλ‘ λλμ΄ λ¨μ΄μ§λ (i, j)
www.acmicpc.net
μ±
μ λμ€λ ꡬκ°ν© λ¬Έμ μ λνμ.. μμλ λ¬Έμ λΆμνκΈ° ννΈμ λμ€λ μλ€μ΄λ λ§μ μ΄ν΄κ° λμ§ μμκ³ ..
κ·Έλ κ².. μ½μ§μ΄ 2~3μΌκ° κ³μ μ§μλλ€. μ±
μμλ μ€λ² 4μ λμ΄λλΌκ³ λμ΄μμ§λ§, νμ¬λ 골λ 3μ λμ΄λλ€.
μμ§ν νμλ μ€λ²λ¬Έμ λ€μ νΈλλ°λ λ무 μ€λ κ±Έλ¦¬κ³ μ΄ν΄νλ λ°μλ λ무 μ΄λ €μ λλ° κ³¨λ λμ΄λλΌλ!
κ·Έλλ μ΄μ μ¬κΈ°κΉμ§ μ¨ κ±° μ΄ λ¬Έμ λ₯Ό λμΆ© λμ΄κ° μ μμκΈ°μ μ΄κ²λ λΆμμ ν΄λ³΄μλ€.
λ¬Έμ μ΄λ¦μ΄ λλ¨Έμ§ ν© κ΅¬νκΈ°λΌκ³ ν΄μ μ§μ§ λλ¨Έμ§λ€μ ꡬν κ²λ€μ λνλ κ²μ΄ μλλΌ,
μ°μλλ μ«μλ₯Ό λν κ°μ λλ¨Έμ§κ° 0μ΄ λλ μμμμ κ°μλ₯Ό ꡬν΄μΌ νλ€.
μ¦, κ²½μ°μ μμ κ°λ
μ€μ νλμΈ μ‘°ν©μ΄ λ€μ΄κ°λ€λ κ²μ΄λ€. μ°Έκ³ λ‘ νμλ κ²½μ°μ μλ μ‘°ν© λ¬Έμ λ₯Ό μ΄λ»κ² νμλλ©΄,
κ²½μ°μ μ κ°μ κ²½μ°μλ μΌμΌμ΄ λ
Έκ°λ€ν΄μ νμμΌλ©°, μ‘°ν©μ 곡μκ³Ό λ¬Έμ νμμ λ¨μμκΈ°ν΄μ νμλ€.
λλΆμ μνμ§μ κ΅κ³Όμλ λ
Έκ°λ€μ νμ μΌλ‘ κ·Έ ννΈλ§ λΉ½λΉ½ν΄μ§κ³ λλλλν΄μ‘λ κΈ°μ΅μ΄ λλ€.
νμ§λ§ κ±±μ ν νμ μλ€! μ§κΈμ΄λΌλ μ‘°ν©μ λν΄μ μ λλ‘ μκ³ νλ©΄ λλ€.
μ¬μ€ νμλ μ΄ λ¬Έμ λλ¬Έμ μ‘°ν©μ λ€μ 곡λΆνλ€.
μ‘°ν©μ΄λ, μλ‘ λ€λ₯Έ nκ°μ μμλ₯Ό κ°μ§λ μ΄λ€ μ§ν©μμ μμ μκ΄μμ΄ rκ°μ μμλ₯Ό κ³ λ₯΄λ κ²μ΄λ€.
μν€λ°±κ³Όμμ μ΄λ κ² μ€λͺ
νκ³ μμ΄μ 볡μ‘ν΄λ³΄μΌ μλ μμ§λ§, μλ₯Ό λ€μ΄λ³΄μ.
μ£Όλ¨Έλμ 10κ°μ ꡬμ¬μ΄ μλ€. ꡬμ¬λ€μλ λ²νΈλ μκ³ . μκΉλ λͺ¨λ κ°λ€. κ·Έ μ€μ 2κ°λ₯Ό λ½λλ€κ³ κ°μ νμ.
κ·ΈλΌ κ·Έ ꡬμ¬μ κΊΌλ΄λλ°μ μμκ° νμνκ°? κ²°κ³Όμ μΌλ‘ μ°λ¦¬λ κ·Έ μ€μ 2κ°μ ꡬμ¬μ λ½μκ² λλ κ²μ΄λ€.
μ΄λ κ² λ½λ μμκ° μ€μνμ§ μκ³ , κ²°κ³Όμ μΌλ‘ λ¨Όμ λ½μ κ²μ μ μΈν λλ¨Έμ§λ₯Ό λ½κ² λλ€λ©΄ μ‘°ν©μ μ¬μ©νκ³ ,
μμ΄μ λ½λ μμκ° μ ν΄μ ΈμμΌλ©°, λ½μ κ²μ λμ΄ν΄μΌ νλ€λ©΄ μ¬μ©νλ κ²μ΄λ€.
μμ΄μ κΈ°νΈλ \(_{n}P_{r}\)μ΄κ³ , μ‘°ν©μ κΈ°νΈλ \(_{n}C_{r}\)μ΄λ€. μ΄λ, \(_{n}C_{r}\)μ
$$\frac{n(n-1)(n-2)...\{n-(r-1)\}}{r!}$$
μ΄λ, λΆμμ μμΉν nμ rκ° λ§νΌ κ³±νλ κ²μ΄λ€. μλ₯Όλ€μ΄ 10κ° μ€μ 2κ°λ₯Ό λ½λλ€κ³ νμ λ, μ²μμ 10κ°μ€μ νλλκΉ 10κ°μ§μ κ²½μ°μ μκ° μμ§λ§, νλλ₯Ό λ½κ³ λμλ 9κ°μ κ²½μ°μ μκ° μκΈ° λλ¬Έμ 10*9λ₯Ό ν΄μ€λ€. μ¬κΈ°μ 2κ°λ§ νλ μ΄μ λ μ°λ¦¬λ ꡬμ¬μ 2κ°λ§ λ½λ κ²μ΄κΈ° λλ¬Έμ΄λ€. 3κ°λ₯Ό λ½λλ€λ©΄ 8κ°μ§μ κ°λ₯μ±μ΄ λ μκΈ°κΈ° λλ¬Έμ 10*9*8μ ν΄μ€μΌ νλ€. r!μ λλλ μ΄μ λ λ½μ μμλ λ€λ₯΄μ§λ§ κ°μ ꡬμ¬μ λ½μμ κ²½μ°λ₯Ό μμ μ£ΌκΈ° μν΄μμ΄λ€.
μ΄μ λ¬Έμ λ₯Ό νκΈ° μν μνμ κ°λ
μ λ€λ€μΌλ, μ΄μ λ€μ λ¬Έμ λ‘ λμ΄μ보μ.
μ¬μ€ νμλ λ¬Έμ λΆμνκΈ° ννΈμ λλ¨Έμ§ ν© λ¬Έμ νμ΄μ ν΅μ¬ μμ΄λμ΄ λΆλΆμ λ μ΄ν΄νμ§ λͺ»νκΈ° λλ¬Έμ,
'μ΄κ² λ¬΄μ¨ λ§μ΄μ§' νλ©΄μ λΆμνμλ€.
μλλ μ±
μ μ νμλ ν΅μ¬ μμ΄λμ΄ λΆλΆμ λ΄ μ€νμΌλλ‘ κ³ μ³μ¨λ³Έ κ²μ΄λ€.
- (A+B)%C = ((A%C) + (B%C))%C, κ³ λ‘ (A+B)%Cλ‘λ§ κ³μ°ν΄λ λλ€.
- ν© λ°°μ΄ S[(νμ¬ν)] - S[(μ ν)]μ μλ³Έ λ°°μ΄μ (μ ν)+1 ~ (νμ¬ν)κΉμ§μ κ΅¬κ° ν©μ΄λ€.
- κ΅¬κ° ν© λ°°μ΄μ μμλ₯Ό MμΌλ‘ λλ λλ¨Έμ§λ‘ μ
λ°μ΄νΈνκ³ S[(νμ¬ν)]κ³Ό S[(μ ν)]μ΄ κ°λ€λ©΄ μλ³Έ λ°°μ΄μμ
(μ ν)+1 ~ (νμ¬ν)κΉμ§μ κ΅¬κ° ν©μ΄ MμΌλ‘ λλμ΄λ¨μ΄μ§λ€λ κ²μ μ μ μλ€.
(S[(νμ¬ν)]%M = S[(μ ν)]%M μ΄λ©΄ (S[(νμ¬ν)] - S[(μ ν)])%M = 0)
μ, μ΄μ λ¬Έμ μ λν λΆμμ λλ¬λ€. μ½λλ‘ λμ΄μ보μ.
ν© λ°°μ΄ Sμ λμ ν©μ κ°μ μ μ₯ν΄μ€λ€. λμ ν©μ μμΈν μ€λͺ
μ https://life-study-1031.tistory.com/7
[ꡬκ°ν©, JAVA]λ°±μ€ - 11659λ²
λ¬Έμ : https://www.acmicpc.net/problem/11659 11659λ²: κ΅¬κ° ν© κ΅¬νκΈ° 4 첫째 μ€μ μμ κ°μ Nκ³Ό ν©μ ꡬν΄μΌ νλ νμ Mμ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€μλ Nκ°μ μκ° μ£Όμ΄μ§λ€. μλ 1,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄
life-study-1031.tistory.com
μ΄ κΈμ μμΈν μμΌλ λμ ν©μ λν΄μ μ λͺ¨λ₯΄κ² λ€λ©΄ μ΄ κΈμ μ°Έκ³ ν΄μ£Όλ©΄ λλ€.
λμ ν©μ κ°μ μ μ₯νλ μ΄μ λ ν©μ΄ MμΌλ‘ λλμ΄λ¨μ΄μ§λ μμμμ ꡬν΄μΌ νκΈ° λλ¬Έμ΄λ€. λμ ν©μ ꡬν λ€μ, MμΌλ‘ λλ μ λλμ΄λ¨μ΄μ§λ€λ©΄ 1νλΆν° κ·Έ ν(nνμ΄λΌκ³ κ°μ νμ)κΉμ§ λν κ°μ΄ λλμ΄λ¨μ΄μ§λ κ²μ΄κΈ° λλ¬Έμ (1,n)μ΄ μ±λ¦½λλ―λ‘, λ΅μ΄ λ μ μλ κ²μ΄λ€.
κ·Έ λ€μμΌλ‘λ μ‘°ν©μ κ°λ
μ μ΄μ©νμ¬ λ΅μ ꡬν΄μΌ λλλ°, κ·Έλ¬κΈ° μν΄μ λ¨Όμ λλ¨Έμ§μ κ°μλ₯Ό μ
μ μμ΄μΌ νλ€. μλ₯Ό λ€μ΄λ³΄μ. λλ¨Έμ§κ° [1, 0, 0, 1, 0]μΌ κ²½μ°, 0μ΄ 3κ°κ° μλ€. μ΄λ 0μ΄ λμ€λ μμμμ κ°κ° λ€λ₯Ό κ²μ΄λ€. κ·Έλ κ² 0μ΄ λμ€λ 3κ°μ§ κ²½μ° μ€μμ iμ jμ ν΄λΉνλ μμμμ μμμ μκ΄μμ΄ λ½λ κ²μ΄κΈ° λλ¬Έμ \(_{3}C_{2}\)λ₯Ό ν΄μΌ νκ³ , κ·Έκ²μ μν΄μλ λλ¨Έμ§μ κ°μκ° νμνλ€. λ¬Όλ‘ 0νλμ i,j μμμμ΄ μκΈ°μ \(_{6}C_{2}\)κ° μλκ°μ? μκ°ν μλ μκ² μ§λ§, μ΄λ κ² λλ©΄ λλ¨Έμ§κ° 0κ³Ό λ¬λΌμ§λ μμμμ΄ λμ¬ μλ μκΈ° λλ¬Έμ \(_{3}C_{2}\)λ₯Ό ν΄μΌ νλ€.
μ¬κΈ°μ μ§λ¬Έμ΄ λμ¬ μ μλ€. λλ¨Έμ§κ° 0μΈ κ²λ€μ κ²½μ°λ§ μΈλ©΄ λλλ°, μ κ΅³μ΄ 0λ³΄λ€ ν° λλ¨Έμ§λ€μ κ°μλ μΈλ κ²μΈκ°? μ΄λ λ¬Έμ λ₯Ό λΆμν λ 3λ²μ ν΄λΉνλ κ°λ
μ μ΄μ©ν건λ°, S[(νμ¬ν)]κ³Ό S[(μ ν)]μ κ°μ΄ κ°μΌλ©΄ (μ ν)+1 ~ (νμ¬ν)κΉμ§μ κ΅¬κ° ν©μ΄ MμΌλ‘ λλμ΄λ¨μ΄μ§λ ꡬκ°μ΄κΈ° λλ¬Έμ 0λ³΄λ€ ν° λλ¨Έμ§μ κ°μλ μΈμ΄μ£Όλ κ²μ΄λ€.
ꡬκΈλ§μΌλ‘ μ°Ύμ νμ΄μ μ±
μμ λμ¨ νμ΄λ€μ 곡ν΅μ μ μ°Ύμλ©΄ S[i]%Mμ κ°κ³Ό λλ¨Έμ§λ₯Ό μ μ₯νλ λ°°μ΄μ μΈλ±μ€κ° κ°λ€λ κ²μΈλ°, μ΄λ κ² μ€μ ν μ΄μ λ κ·Έ λλ¨Έμ§μ κ°μλ₯Ό ꡬνκΈ° μν΄μμ΄λ€. μλ₯Ό λ€μ΄, λλ¨Έμ§κ° [1, 0, 0, 1, 0] μ΄λ κ² λμλ€λ©΄ μ¬λμ 0μ΄ 3κ°, 1μ΄ 2κ° μ΄λ κ² μ
μ μμ§λ§ μ»΄ν¨ν°λ μΌμΌμ΄ 1μ© λν΄μ€μΌ νκΈ° λλ¬Έμ, λλ¨Έμ§λ₯Ό μ μ₯νλ λ°°μ΄μ μΈλ±μ€μ κ°κ² ν κ²μ΄λ€. κ·Έλ¦Όμ 보면 μ΄ν΄κ° μ¬μΈ κ²μ΄λ€.
μ΄λ° μμΌλ‘ μ μ₯μ΄ λλ κ²μ΄λ€. μ°λ¦° μ΄μ \(_{3}C_{2}+_{2}C_{2}\)μ κ°μ ꡬνλ©΄ λλ€.
μ΄μ νμ΄μ κ΄λ ¨λ μ½λννΈλ λμ΄ λ¬λ€.
μ΄λ²μλ μνμ κ°λ
κ³Ό μ½λ©μ΄ κ°μ΄ λμμ νμλ μ΄ κΈμ μ°λλ°μ 3~4μΌ μ λ κ±Έλ¦° κ² κ°λ€.
λ΄μ©μ΄ μ λ¦¬κ° μ λμ§ μμκΈ° λλ¬Έμ΄λ€. μ΄μ λ μμ±νλ©΄μ λ§μ΄ μ λ¦¬κ° λΌμ λ¨Έλ¦Ώμμ΄ νκ²° κΉλν΄μ§ κ² κ°λ€.
μ΄λ² λ΄μ©μ μμ½νμλ©΄
β μ΄ λ¬Έμ λ₯Ό νκΈ° μν΄μ μνμ κ°λ
μ€ μ‘°ν©μ μ¬μ©ν΄μΌ νλ€.
μ‘°ν©μ μμμ \(\frac{n(n-1)(n-2)...\{n-(r-1)\}}{r!}\)
β‘ λλ¨Έμ§λ₯Ό μ μ₯νλ λ°°μ΄μ μΈλ±μ€ = λλ¨Έμ§ μ΄λ κ² μ°μ°μ ν΄μ λλ¨Έμ§μ κ°μλ₯Ό μΈμ΄μ€λ€.
κ·Έ μ΄μ λ μμμμ κ²½μ°μ μλ₯Ό λν΄μ£ΌκΈ° μν΄μ.
첫λ²μ§Έλ‘ ν©λ°°μ΄ Sμ λλ¨Έμ§λ₯Ό κ·Έλλ‘ λ£μ΄μ κ³μ°νλ μ½λλ€.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
// TODO λ°±μ€ 10986λ²
//μ
λ ₯μ 빨리 λ°κΈ° μν΄ BufferedReader ν΄λμ€λ₯Ό μ΄μ©ν΄μ μ
λ ₯μ λ°μ
//BufferedReader ν΄λμ€λ‘ μ
λ ₯μ λ°μΌλ©΄ λ¬Έμμ΄ νμ±μ΄ νμν¨.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
//N = μ«μλ₯Ό μ
λ ₯λ°μ κ°μ, M = μ
λ ₯λ°μ μ«μλ€μ λλ μ«μ
//sums = ν©λ°°μ΄ S, count = λλ¨Έμ§ λ°°μ΄, answer = μμμ κ°μ
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
long[] sums = new long[N+1];
long[] count = new long[1000];
long answer = 0;
//λμ ν© λ°°μ΄ λ§λ€κΈ°
st = new StringTokenizer(br.readLine());
for(int i=1; i<=N; i++) {
sums[i] = sums[i-1] + Integer.parseInt(st.nextToken());
}
for(int i=1; i<=N; i++) {
//sums[i]μ %M μ°μ°μ νκ³ sums[i]μ λ€μ μ μ₯
sums[i] %= M;
//λλ¨Έμ§κ° 0μ΄λ©΄ answerλ₯Ό λν΄μ€ = μμμμ κ°μλ₯Ό μΈμ΄μ€
if(sums[i] == 0) {
++answer;
}
//λλ¨Έμ§μ ν΄λΉνλ μΈλ±μ€μ 1μ λν΄μ€
++count[(int)sums[i]];
}
//μ‘°ν©μ μ΄μ©ν μμ
//2λ₯Ό λλ μ΄μ λ 2! = 1*2 = 2 μ΄κΈ° λλ¬Έμ΄λ€.
for(int i=0; i<count.length; i++) {
if(count[i] > 1) {
answer += count[i]*(count[i]-1)/2;
}
}
//μ λ΅ μΆλ ₯
System.out.println(answer);
}
}
λλ²μ§Έλ‘λ μλ‘μ΄ λ³μλ₯Ό μ΄μ©ν λ°©λ²μ΄λ€.
import java.io.*;
import java.util.*;
public class BOJ_10986 {
public static void main(String[] args) throws IOException{
// TODO λ°±μ€ 10986
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); //μ
λ ₯λ°μ μ«μμ κ°μ
int M = Integer.parseInt(st.nextToken()); //λλ μ
long[] sums = new long[N+1];
long[] count = new long[1000];
long answer = 0;
//μ΄λ κ² νλ©΄ forλ¬Έμ 1κ°λ§ μ¨λ ν©λ°°μ΄ Sμ κ°μ μμμν€μ§ μκ³ κ³μ°νλ κ²μ΄ κ°λ₯νλ€.
st = new StringTokenizer(br.readLine());
for(int i=1; i<=N; i++) {
sums[i] = sums[i-1] + Integer.parseInt(st.nextToken());
//λλ¨Έμ§λ₯Ό μ μ₯νλ λ³μλ₯Ό μ μΈν¨.
int rem = (int) (sums[i]%M);
//λλ¨Έμ§κ° 0μ΄λ©΄ answerλ₯Ό λλ €μ€λ€.
if(rem == 0) {
++answer;
}
//λλ¨Έμ§λ₯Ό λλ¨Έμ§ λ°°μ΄μ μΈλ±μ€λ‘ μ΄μ©νμ¬ λλ¨Έμ§μ κ°μλ₯Ό μΈμ΄μ€λ€.
++count[rem];
}
for(int i=0; i<count.length; i++) {
if(count[i] > 1) {
answer += count[i]*(count[i]-1)/2;
}
}
System.out.println(answer);
}
}
'βJAVA > π©βπ»BOJ(λ°±μ€)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ν¬ ν¬μΈν°, JAVA] λ°±μ€ - 2018 (0) | 2022.09.19 |
---|---|
[ν¬ ν¬μΈν°, JAVA] λ°±μ€ - 2467 (0) | 2022.09.19 |
[ꡬκ°ν©, JAVA] λ°±μ€ - 11660 (0) | 2022.08.17 |
[ꡬκ°ν©, JAVA]λ°±μ€ - 11659λ² (0) | 2022.08.16 |
[λ°°μ΄, JAVA]λ°±μ€ - 1546λ² (0) | 2022.08.16 |