夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

gitとgistの混同orz

gitとgistの違いを理解してなくて、「よし、今回からコードはgithubにpushしてそれをブログに貼り付けよう!」とか思いたち、2年ぶりのcommitにSSHまわりで苦戦し…

それでいざ出来たと思ったらようやくgistじゃないと埋め込みできないとしって今深い悲しみに包まれているわけですね、はい。

ちなみに
https://github.com/touyou/programming
ここ、晒し。

じゃデジタルアーツについて
なんか特に難問は無かったですが、色々と嫌らしかったり、力量不足だったりで1完しかできませんでした(参加賞はもらえる)

A

入力を頑張る。

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int n;
string s[1000], t[50];
int main() {
    int x=0;
    string str;
    getline(cin, str);
    string tmp="";
    for (int i=0; i<str.length(); i++) {
        if (str[i]==' ') {
            s[x++] = tmp;
            tmp="";
        } else {
            tmp+=str[i];
        }
    }
    s[x++] = tmp;
    cin>>n;
    for (int i=0; i<n; i++) {
        cin>>t[i];
        for (int j=0; j<x; j++) {
            if (t[i].length()!=s[j].length()) continue;
            bool flag=true;
            for (int k=0; k<t[i].length()&&flag; k++) {
                if (t[i][k]!='*'&&t[i][k]!=s[j][k]) flag=false;
            }
            if (flag) {
                for (int k=0; k<s[j].length(); k++) s[j][k]='*';
            }
        }
    }
    cout<<s[0];
    for (int i=1; i<x; i++) cout<<" "<<s[i];
    cout<<endl;
}

B

愚直にやるだけなんだけど僕の方法だと一つだけコーナーケースがあるらしい
結局わからない、間違いコード

#include <cstdio>
#include <iostream>
using namespace std;
string c;
int main() {
    cin>>c;
    int cnt=0;
    string res="";
    for (int i=0; i<c.length(); i++) {
        if (cnt==0) {
            if (c[i]!='a') res+=(c[i]-1);
            cnt++;
        } else if (cnt==1) {
            if (c[i]=='z') {
                res+=c[i];
                continue;
            }
            res+=(c[i]+1);
            cnt++;
        } else {
            res+=c[i];
        }
    }
    if (cnt==1) res+='a';
    if (res.length()<0||res.length()>20||res==c) puts("NO");
    else cout<<res<<endl;
}

C

足して引くみたいな風にやると余裕らしい。
で、愚直でもvectorうまく使いこなせば通るらしくmap愚直解に書き直してたんだけどなんかmapだと無理だった()
TLE解です

#include <cstdio>
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
int n,m,K;
int tl[100000];
map<int, map<int, bool> > fl;
int main() {
    scanf("%d%d%d",&n,&m,&K);
    for (int i=0; i<m; i++) {
        string mode; cin>>mode;
        if (mode=="t") {
            int j; scanf("%d",&j); j--;
            map<int, bool>::iterator it=fl[j].begin();
            for (; it!=fl[j].end(); it++) {
                if ((*it).second) {
                    int k=(*it).first;
                    tl[k]++;
                }
            }
            tl[j]++;
        } else if (mode=="f") {
            int j, k; scanf("%d%d",&j,&k); j--; k--;
            fl[j][k]=true;
            fl[k][j]=true;
        } else {
            int j, k; scanf("%d%d",&j,&k); j--; k--;
            fl[j].erase(k);
            fl[k].erase(j);
        }
    }
    sort(tl, tl+n);
    printf("%d\n",tl[n-K]);
}

明日はNPCAですね。

表彰式どうしよう