티스토리 뷰

알고리즘/BOJ

[백준] 2632 피자판매

세진짱 2019. 8. 27. 22:04

이 문제는 lower_bound && upper_bound를 이용하여 풀었다

반드시 연속적인 부분을 잘라야하고 피자가 원이라는 것을 잘 생각해야한다!

그럼 원에서 연속적인 부분들의 값을 각 피자의 배열을 만들어 넣고

lower_bound와 upper_bound를 이용해 각 피자에서 나올 수 있는

값과 수를 찾아서  곱하면 답이된다

코드에서는 원이기때문에 1~n이 아닌 1~2n까지 배열을 잡고

맨 뒤어서부터 시작해 만들 수 있는 값도 배열 넣었다

그리고 0과 sum[1~n]값은 한번만 나올 수 있으므로 마지막에 따로 넣어주었다

값을 다 넣고 크기가 P인 피자를 만들때

A에서 i를 찾고 B에서 P-i를 찾은 후 곱해주며 다 더하며 답이다!

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <set>
#include <algorithm>
#include <vector>
using namespace std;
int P,n,m;
int A[1010],B[1010],PA[3010],PB[3010];
vector<int> a,b;
int main(){
    //freopen("input.txt","r",stdin);
    scanf("%d %d %d",&P,&n,&m);
    for(int i=1;i<=n;i++scanf(" %d",&A[i]);
    for(int i=1;i<=m;i++scanf(" %d",&B[i]);
    for(int i=1;i<=n;i++) PA[i]=PA[i-1]+A[i]; for(int i=n+1;i<=n*2;i++) PA[i]=PA[i-n]+PA[n];
    for(int i=1;i<=m;i++) PB[i]=PB[i-1]+B[i]; for(int i=m+1;i<=m*2;i++) PB[i]=PB[i-m]+PB[m];
    for(int i=1;i<=n;i++){
        for(int j=i;j<i+n-1;j++){
            a.push_back(PA[j]-PA[i-1]);
        }
    } 
    for(int i=1;i<=m;i++){
        for(int j=i;j<i+m-1;j++){   
            b.push_back(PB[j]-PB[i-1]);
        }
    }
    a.push_back(PA[n]); b.push_back(PB[m]);
    a.push_back(0); b.push_back(0);
    sort(a.begin(),a.end());
    sort(b.begin(),b.end());
    int ans=0;
    for(int i=0;i<=P;i++){
        int c = upper_bound(a.begin(),a.end(),i) - lower_bound(a.begin(),a.end(),i);
        int w = upper_bound(b.begin(),b.end(),P-i) - lower_bound(b.begin(),b.end(),P-i);         
        if(c&&w) ans+=(c*w);
    }
    printf("%d\n",ans);
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
cs

 

'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 3649 로봇 프로젝트  (0) 2019.08.27
[백준] 3020 개똥벌레  (0) 2019.08.27
[백준] 2206 벽 부수고 이동하기  (0) 2019.08.27
[백준] 1194 달이 차오른다, 가자.  (0) 2019.08.27
[백준] 1837 암호제작  (0) 2018.07.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함