読者です 読者をやめる 読者になる 読者になる

夢追い人

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

日にちのタイトルワンパターン化

てへぺろ

AOJ 0530

実装力不足で他人の参考にしながら書いてた

#include <cstdio>
#include <cmath>
#include <climits>
#include <map>
#include <vector>
#include <algorithm>
#define inf INT_MAX/2
#define f first
#define s second
using namespace std;
typedef pair<int, int> P;
int n, m;
int main() {
    while (scanf("%d%d",&n,&m)) {
        if (!n&&!m) break;
        vector<P> riv[155];
        vector<vector<vector<int> > > dp(155);
        for (int i=0; i<n; i++) {
            int k; scanf("%d",&k);
            riv[i].clear();
            for (int j=0; j<k; j++) {
                int x, d; scanf("%d%d",&x,&d);
                riv[i].push_back(P(x,d));
            }
        }
        for (int i=0; i<n; i++) {
            dp[i].resize(riv[i].size(), vector<int>(m+1,inf));
        }
        for (int i=0; i<riv[0].size(); i++) {
            dp[0][i][0]=0;
        }
        for (int i=0; i<riv[1].size(); i++) {
            dp[1][i][1]=0;
        }
        int res=inf;
        for (int i=0; i<n; i++) {
            for (int j=0; j<riv[i].size(); j++) {
                for (int k=0; k<=m; k++) {
                    if (i+1==n) {
                        res=min(res,dp[i][j][k]);
                    } else {
                        for (int l=0; l<riv[i+1].size(); l++) {
                            dp[i+1][l][k]=min(dp[i+1][l][k],dp[i][j][k]+(int)abs(riv[i][j].f-riv[i+1][l].f)*(riv[i][j].s+riv[i+1][l].s));
                        }
                        if (i<n-1&&k<m) {
                            if (i+2==n) {
                                res=min(res,dp[i][j][k]);
                            } else {
                                for (int l=0; l<riv[i+2].size(); l++) {
                                    dp[i+2][l][k+1]=min(dp[i+2][l][k+1],dp[i][j][k]+(int)abs(riv[i][j].f-riv[i+2][l].f)*(riv[i][j].s+riv[i+2][l].s));
                                }
                            }
                        }
                    }
                }
            }
        }
        printf("%d\n",res);
    }
}

VK CUP ROUND 2

非公式Div.2ラウンドへの参加
1311->1287(-24)

A

読み間違えで-150もしてしまった・・・

#include <cstdio>
#include <algorithm>
using namespace std;
int n, a, b;
int h[2000];
int main() {
    scanf("%d%d%d",&n,&a,&b);
    for (int i=0; i<n; i++) scanf("%d",&h[i]);
    sort(h, h+n);
    int x1=h[b-1];
    int x2=h[b];
    printf("%d\n",x2-x1);
}

B

やるだけ

#include <iostream>
#include <algorithm>
using namespace std;
string a, s;
int main() {
    cin>>a>>s;
    sort(s.rbegin(), s.rend());
    int sp=0;
    for (int i=0; i<a.length(); i++) {
        if (sp<s.length()&&s[sp]>a[i]) {
            a[i]=s[sp];
            sp++;
        }
    }
    cout<<a<<endl;
}

C

とてつもなく難しい貪欲だったらしいです
無理

D

貪欲とかDPぽかったけどスルー

E

読んでない

結果

人権剥奪。読み間違えよくない

広告を非表示にする