cf1206 해결 보고서
에이
시뮬레이션
#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;
}
비
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;
}
기음
탐욕 루틴 구성된
I + i가 있는지 각각의 차이는, N + 1의 위상차이다.
샘플은 그렇게 구성 될 수있다.
\ ([. 1]. A = 1, A [N- + 1이다.] = 2; \)
\ ([2] = 2N A, A [N- + 2] = 2N- 1]. \)
\ (A = 3 [3.]. , A [N- + 3.] = 4]. \)
[. 4] \ (A = 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;
}
디
이 문제는 쉽게 네 잘못이다.
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
하지 아니지만, 그 손에 대화 형 문제를 참조하십시오.
음, 뻐꾸기.