아 진짜 아쉽네요 E에서 뭐가 틀린 건지 한참 헤멨는데 int를 long long으로 바꾸니까 바로 AC 받았습니다.
그것만 신경 써줬으면 1350 정도 퍼포 나왔을텐데 진짜 아쉽네요..
세네판 정도 안에 그린 찍고 싶었는데 ㅋㅋ 안 될 것 같네요
A. Print a Pedestal (Codeforces logo?)
가운데가 제일 길쭉하고 왼쪽이 그 다음, 오른쪽이 그다음으로 길도록 해주는 단순 구현 문제입니다.
#include <stdio.h>
int main() {
int n, t;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
int first = n / 3 + 1;
if(n % 3 != 0) first++;
int second = n - first;
second /= 2;
second++;
int third = n - first - second;
printf("%d %d %d\n", second, first, third);
}
}
B. Array Decrements
이번 코포는 B 때문에 망했다고 해도 과언이 아닌..
#include <stdio.h>
int main() {
int n,m, t;
int arr[1000000] = {};
int brr[1000000] = {};
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
int temp = 0,NO = 0,no = 0;
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for(int i = 0; i < n; i++) {
scanf("%d", &brr[i]);
if(arr[i] < brr[i]) NO = 1;
}
for(int i = 0; i < n; i++) {
if(temp < arr[i] - brr[i]) temp = arr[i] - brr[i];
}
if(temp == 0) temp = arr[0] - brr[0];
for(int i = 0; i < n; i++) {
arr[i] -= temp;
}
for(int i = 0; i < n; i++) {
if(arr[i] != brr[i]) {
no++;
if(brr[i] == 0 && arr[i] <= 0) no--;
}
}
if(no || NO) printf("NO\n");
else printf("YES\n");
}
}
이렇게 어렵게 푸는 것도 맞는지도 모르겠습니다 사실..
여태 코포 몇판 안 해봤지만 중간에 문제 하나 막히면 거기서 말리기 시작하는 타입인 거 같아요 저는
일 끝나기 전에 다음 task 주면, task 끝낸 시간의 간격 출력.
일 끝나고 난 후에 다음 task 주면 task 준 시간과 끝낸 시간의 간격 출력.
푸는 데에 5분도 안 걸렸습니다.
#include <stdio.h>
int main() {
int n, t;
long long arr[300000] = {};
long long brr[300000] = {};
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
for(int i = 0; i < n; i++) {scanf("%lld", &arr[i]);
}
for(int i = 0; i < n; i++) {scanf("%lld", &brr[i]);
}
printf("%lld ", brr[0] - arr[0]);
for(int i = 1; i < n; i++) {
if(arr[i] < brr[i - 1]) printf("%lld ", brr[i] - brr[i - 1]);
else printf("%lld ", brr[i] - arr[i]);
}
printf("\n");
}
}
D. Black and White Stripe
문자열에서 0~k-1 의 문자열 안에 W가 얼마나 들어있는지 찾고
앞으로 한 칸씩 나가면서 가장 적은 값 출력.
엄청 쉬운 문제인데 구현 실수해서 2번이나 틀렸습니다.
근데 이건 제 실력이 부족한 탓이에요
#include <stdio.h>
#include <algorithm>
int main() {
int n,m, t;
char s[300000] = {};
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
scanf("%d", &m);
scanf("%s", s);
int count = 0, min = 10000000;
for(int i = 0; i < m; i++) {
if(s[i] == 'W') count++;
}
if (min > count) min = count;
for(int i = 0; i < n - m; i++) {
if(s[m + i] == 'W') count++;
if(s[i] == 'W') count--;
if(min > count) min = count;
}
printf("%d\n", min);
}
}
E. Price Maximization
맨 처음에 각각 물건 입력받으면서 k로 나눈 값 더해주고,
나머지는 모아서 배열에 담은 다음에 작은놈들끼리 짝지어주면서 짝 맞으면 더해주는 식으로 짰습니다...
구현까지도 괜찮았는데 long long을 쓰는 걸 깜빡했네요
𝑎𝑛은 10억까지도 가능하니까 당연히 long long인데 이걸 뭔 생각으로 int로 출력하려 했는지.. 앞으로
#define int long long 쓰겠습니다 짜증나서..
#include <stdio.h>
int main() {
int n,m, t;
int k[1001] = {};
scanf("%d", &t);
while(t--) {
scanf("%d%d", &n, &m);
long long temp = 0;
long long ans = 0;
for(int i = 0; i < n; i++) {
scanf("%lld", &temp);
ans += temp / m;
k[temp % m]++;
}
int end = m, first = 1;
for(int i = 0; i <= m; i++) {
for(int j = m - i; j <= m; j++) {
if(i == j) {
ans+= k[i] / 2;
k[i] %= 2;
continue;
}
if(k[i] > 0 && k[j] > 0) {
if(k[i] > k[j]) {
int temp = k[j];
ans += k[j];
k[i] -= temp;
k[j] -= temp;
}
else {
int temp = k[i];
ans += k[i];
k[i] -= temp;
k[j] -= temp;
}
//printf("%d %d\n", k[i], k[j]);
}
}
}
for(int i = 0; i < 1000; i++) {
k[i] = 0;
}
printf("%lld\n" , ans);
}
}
'코드포스' 카테고리의 다른 글
Codeforces Round #809 (Div. 2) (0) | 2022.07.21 |
---|---|
코드포스 803 A,B,C 풀이 Codeforces Round #803 (Div. 2) (0) | 2022.07.01 |
Codeforces Round #796 (Div. 2) A, B ,D 풀이 (0) | 2022.06.04 |
코드포스 Codeforces Round #794 (Div. 2) A, B, C 풀이 (0) | 2022.05.26 |
코드포스 Educational Codeforces Round 129 A, B, C 풀이 (0) | 2022.05.24 |