본문으로 바로가기

Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined): http://codeforces.com/contest/757


현실은 시궁창같았던 코포 ㅜㅠ


A. Gotta Catch Em' All!

처음에는 문제 이해를 못해서 너무 오래걸렸다. ㅠㅠ

그냥 알파벳 개수세는 문제...

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
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int cnt[7];
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    string s; cin >> s;
    int j=0;
    for(int i=0; i<s.size(); i++) {
        if(s[i]=='B') cnt[0]++;
        else if(s[i]=='l') cnt[1]++;
        else if(s[i]=='b') cnt[2]++;
        else if(s[i]=='s') cnt[3]++;
        else if(s[i]=='r') cnt[4]++;
        else if(s[i]=='u') cnt[5]++;
        else if(s[i]=='a') cnt[6]++;
    }
    int mn = 0x3f3f3f3f;
    for(int i=0; i<5; i++) {
        mn = min(mn, cnt[i]);
    }
    for(int i=5; i<7; i++) {
        mn = min(mn, int(cnt[i]/2));
    }
    printf("%d", mn);
    return 0;
}
cs



B. Bash's Big Day

숫자가 중복으로 들어올 수 있다는 건 생각도 못했다. ㅠㅠ

10만보다 작은 숫자를 제곱해서 10만 미만의 숫자를 만들 수 있는 경우만 생각해줬다.

그래서 10000이 5번 들어온다거 하는 경우를 전혀 처리해주지 못해서 망했다.

덕분에 시스템에서 나갔는데, 내 주변 사람들도 와장창 나갔다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
#include <algorithm>
using namespace std;
int cnt[100001];
int main() {
    int n; scanf("%d"&n);
    for(int i=0; i<n; i++) {
        int x; scanf("%d"&x);
        cnt[x]++;
    }
    int mx=1;
    for(int i=2LL; i<=100000; i++) {
        int cur=0;
        for(int j=i; j<=100000; j+=i) cur += cnt[j];
        mx=max(mx,cur);
    }
    printf("%d", mx);
    return 0;
}
cs



C. Felicity is Coming!

tourist가 코딩의 경지를 가히 예술로 승화시킨 문제.

진짜 이 코드보고 감동먹었다.


와 벡터를 통째로 소팅해서 저렇게 간단하게 풀다니...

심지어 E번 풀고나서 4분만에 풀었다. ㄷㄷ

(자아파괴 시전중)


아무튼 콘테 끝나고 투어리스트 코드 보고 짜봤다.

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
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v[1000001];
const int mod = 1e9+7;
int main() {
    int n,m; scanf("%d%d",&n,&m);
    for(int i=0; i<n; i++) {
        int g; scanf("%d"&g);
        while(g--) {
            int x; scanf("%d"&x);
            v[x].push_back(i);
        }
    }
    sort(v+1,v+1+m);
    int cnt=1, ans=1;
    for(int i=2; i<=m; i++) {
        if(v[i-1]==v[i]) {
            cnt++;
            ans = (long long)ans*cnt%mod;
        } else cnt=1;
    }
    printf("%d", ans);
    return 0;
}
cs



이 이후 문제는 아직 읽어보지도 못했다.

Div1과 합쳐서 본 문제라서 그런지 문제가 C번부터 너무 어려웠다.

발로 푸는 A하나 맞고, B는 시스템에서 나가고, C는 틀리는 바람에 최악의 1Solve를 기록했다.

새해엔 cyan에서 노는가 싶더니 다시 green을 찍어버렸다.





# 최종 스코어 # (Rank: 2911/4856)






망할 그린