티스토리 뷰

SW Expert Academy :: SWEA :: 5436 :: 동욱이의 조판하기


출처 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWV5nLjas4cDFAV4&categoryId=AWV5nLjas4cDFAV4&categoryType=CODE


#include <iostream>

#include <algorithm>

#include <string>

#include <memory.h>

using namespace std;


int arr[500005], check[500005], a, b;

long long ans;


long long cal(int num, int m, long long aa) {

for (int i = m - 1; i <= num;i += (m - 1)) {

if (check[i] == -1 && i != num) {

aa += (arr[i + 2] + 1); i += 2;

}

else if (check[i] >= 0) {

aa += (arr[check[i]] + 1); i = check[i];

}

else if (check[i] == -2) {

aa += (arr[i + 1] + 1); i += 1;

}

}

return aa * m;

}


int main(void) {


int T; cin >> T; cin.ignore();

for (int tc = 1; tc <= T; tc++) {

ans = 0;

string s; int cnt = 0;

do {

cin >> s; int len = s.length();

for (int qq = cnt;qq < cnt + len;qq++) {

arr[qq] = len; check[qq] = cnt;

}

cnt += len;

check[cnt - 1] = -1;

arr[cnt] = -1; check[cnt] = -2; cnt++;

} while (getc(stdin) == ' ');

cin >> a >> b;


for (int i = a; i <= b; i++) {

if (i == 1) ans += cnt - 1;

else ans += cal(cnt - 2, i, arr[0]);

}


cout << "#" << tc << " " << ans << endl;

}


return 0;

}



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

[SWEA 5650] 핀볼 게임  (0) 2018.09.19
[SWEA 5521] 상원이의 생일파티  (0) 2018.09.07
[SWEA 5432] 쇠막대기 자르기  (0) 2018.08.29
[SWEA 5431] 민석이의 과제 체크하기  (0) 2018.08.29
[SWEA 2382] 미생물 격리  (0) 2018.08.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함