レポートを解決cf1206

ディレクトリ

レポートを解決cf1206

A

シミュレーション

#include <bits/stdc++.h>
using namespace std;
int n,m,a[1010],b[12910];
int dsr[1111];
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;++i) scanf("%d",&a[i]),dsr[a[i]]=1;
    scanf("%d",&m);
    for(int j=1;j<=m;++j) scanf("%d",&b[j]),dsr[b[j]]=1;
    for(int i=1;i<=n;++i) {
        for(int j=1;j<=m;++j) {
            if(!dsr[a[i]+b[j]]) {
                cout<<a[i]<<" "<<b[j];
                return 0;
            }
        }
    }
    return 0;
}

B

DPの人気は、実際には、配列を開けないでください

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=2e5+7;
ll n,a[_],b[_],f[_][2];
int main() {
    cin>>n;
    for(ll i=1,x;i<=n;++i) {
        cin>>x;
        a[i]=abs(x-1),b[i]=abs(x+1);
    }
    f[0][1]=100000000000000000LL;
    for(ll i=1;i<=n;++i) {
        f[i][0]=min(f[i-1][0]+a[i],f[i-1][1]+b[i]);
        f[i][1]=min(f[i-1][1]+a[i],f[i-1][0]+b[i]);
    }
    cout<<f[n][0];
    return 0;
}

C

貪欲、ルーチン、構成
IとI + N + 1の位相差であることをそれぞれ、差。
試料をそのように構成されてもよいです。
\([1] = 1、A [N- + 1] = 2; \)
\([2] = 2N A、A [N- + 2] = 2N-1; \)
\(= 3 [3]。 、A [N- + 3] = 4; \)
[4] \(= 2N-2、A [N- + 4] = 2N-3; \)
\(............ \)
偶数を推測ない溶液、非常にルーチン

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=2e5+7;
int n,a[_],b[_];
int main() {
    scanf("%d",&n);
    if(n%2==0) return puts("NO"),0;
    int l=1,r=n*2;
    for(int i=1;i<=n;++i) {
        if(i&1) {
            a[i]=l;
            ++l;
            b[i]=l;
            ++l;
        } else {
            a[i]=r;
            --r;
            b[i]=r;
            --r;
        }
    }
    printf("YES\n");
    for(int i=1;i<=n;++i) printf("%d ",a[i]);
    for(int i=1;i<=n;++i) printf("%d ",b[i]);
    return 0;
}

D

この問題は簡単にそう間違っていましたさ。
Xは、二進数1のビット数が3以上です。
答えは3ではない、と彼の小さなANSアップ超えません。
まず第一には、無用0を削除します。
残数が120より大きい場合、その後、上記ケースを有していなければなりません。
それぞれが少なくとも一つの番号が含まれているため。
100はその後に絞り込まれます。
暴力フロイドが最小のリングを見つけるために、私が学びました。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,ans,dis[207][207],g[207][207];
std::vector<ll> a;
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;++i) {
        ll x;cin>>x;
        if(x) a.push_back(x);
    }
    n=a.size();
    if(n>=130) return puts("3"),0;
    memset(dis,0x3f,sizeof(dis));
    memset(g,0x3f,sizeof(g));
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            dis[i][j]=g[i][j]=233;
    for(int i=1;i<=n;++i) {
        for(int j=1;j<=n;++j) {
            if(i==j) continue;
            if(a[i-1]&a[j-1]) dis[i][j]=g[i][j]=1;
        }
    }
    ans=200;
    for(int k=1;k<=n;++k) {
        for(int i=1;i<k;++i)
            for(int j=i+1;j<k;++j)
                ans=min(ans,dis[i][j]+g[j][k]+g[k][i]);
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    }
    if(ans==200) ans=-1;
    printf("%d\n",ans);
    return 0;
}

E、F

しないではないが、その手にインタラクティブな問題を参照してください。
まあ、カッコウ。

おすすめ

転載: www.cnblogs.com/dsrdsr/p/11375129.html