티스토리 뷰
반응형
You are given a sequencea1,a2,…,ana1,a2,…,anconsisting ofnnnon-zero integers (i.e.ai≠0ai≠0).
You have to calculate two following values:
- the number of pairs of indices(l,r)(l,r)(l≤r)(l≤r)such thatal⋅al+1…ar−1⋅aral⋅al+1…ar−1⋅aris negative;
- the number of pairs of indices(l,r)(l,r)(l≤r)(l≤r)such thatal⋅al+1…ar−1⋅aral⋅al+1…ar−1⋅aris positive;
Print two integers — the number of subsegments with negative product and the number of subsegments with positive product, respectively.
이 문제는 대회당시 풀지 못 했다. Div2 B번에서 꺾이다니 크흑 .. 문제태그엔 구현, 조합론 이 달려있다.
나는 수학적 능력은 정말 떨어지는 듯 ..
접근방식은 다음과 같다.
1. 모든 구간의 수는 n*(n+1)이다.
2. 만약 구간 곱이 양수인 임의의 구간들의 집합을 A라 하자.
3. 곱이 음수인 임의의 구간들의 집합을 B라 할 때 의 크기 |B|는 다음과 같다. |B| = n*(n+1) - |A|.
이 때, 우리는 |A|의 크기만을 구하는 것을 구현할 수 있다.
|A|의 크기를 구하는 방법은 다음과 같다.
순열 a를 순회하면서, 현재까지 곱이 음수인지 양수인지 체크한다. 만약 음수면 |A| += cnt2 를 하고, 양수이면 |A| += cnt1 을 수행한다.
cnt 는 현재까지의 element 를 더한 것이고, cnt1 과 cnt2는 음수 양수 state에 따라 증가 하고, ansP에 toggle 되어 더해진다.
#include <iostream>
using namespace std;
int a[(int)2e5];
int main ()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n ;
for (int i=0; i<n; i++)
cin >> a[i];
long long ansP =0;
int cnt1 =0, cnt2 =0;
int bal = 0;
for (int i=0; i<n; i++)
{
if ( bal % 2 == 0) cnt1++;
else cnt2++;
if (a[i] <0) bal++;
if ( bal%2 == 0)
ansP += cnt1;
else
ansP += cnt2;
}
cout << ((long long)n)*(n+1)/2 - ansP << " " << ansP <<"\n";
}
반응형
'알고리즘 문제 > math' 카테고리의 다른 글
중국인의 나머지 정리 (0) | 2019.10.20 |
---|---|
삼각형의 면적 구하기, 백준 2166 다각형의 면적 (0) | 2019.03.20 |
백준 1081 합 (0) | 2019.03.09 |
codeforces 1060C Maximum Subrectangle (0) | 2018.12.13 |
908C New Year and Curling (0) | 2017.12.31 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 엄청난 인내심과 시뮬레이션을 위한 아레나 툴
- 시뮬레이션
- 아레나시뮬레이션
- 이산수학
- grafana cloud
- 백준
- 이산 수학
- 그라파나
- javascript
- Grafana
- 아레나
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- Simulation
- 자바스크립트
- 로젠
- 항해99
- Discrete Mathematics
- 명제논리
- paul wilton
- 아레나 시뮬레이션
- Arena
- rosen
- 대규모 시스템 설계 기초
- Propositional and Predicate Logic
- 자바스크립트 예제
- flutter
- 데이터 중심 애플리케이션 설계
- beginning javascript
- 최단경로 알고리즘
- arena simulation
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함