A. Choose Two Numbers
分析: 桶
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 104;
int a[maxn],b[maxn],u[500],v[500];
int main()
{
int n,m;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i];
u[a[i]]=1;
}
cin>>m;
for(int i=1;i<=m;i++) {
cin>>b[i];v[b[i]]=1;
}
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
if(!u[a[i]+b[j]]&&!v[a[i]+b[j]]) {
cout<<a[i]<<" "<<b[j];
return 0;
}
return 0;
} B. Make Product Equal One 分析:略
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 4;
ll a[maxn];
ll max(ll a,ll b){return a>b?a:b;}ll min(ll a,ll b){return a<b?a:b;}
int main()
{
int n,num=0,cnt=0;
ll ans=0;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i];
if(a[i]<0) cnt++;
else if(a[i]==0) num++;
}
if(cnt%2==0){
for(int i=1;i<=n;i++)
{
if(a[i]>0) ans+=(a[i]-1);
else if(a[i]<0)ans+=((-1)-a[i]);
else ans++;
}}
else {
if(num)
{
for(int i=1;i<=n;i++) {
if(a[i]>0) ans+=(a[i]-1);
else if(a[i]<0) ans+=((-1)-a[i]);
else ans++;
}
}
else {
for(int i=1;i<=n;i++) {
if(a[i]>0) ans+=(a[i]-1);
else if(a[i]<0) ans+=((-1)-a[i]);
else ans++;
}
ans+=2;
}
}
cout<<ans;
return 0;
} C. Almost Equal 分析: 构造 , 配对面对面放
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 3;
int vis[maxn],a[maxn];
ll max(ll a,ll b){return a>b?a:b;}ll min(ll a,ll b){return a<b?a:b;}
int main()
{
int n;
cin>>n;
if(n==1) {
cout<<"YES\n1 2";
return 0;
}
else if(n%2==0) {
cout<<"NO"; return 0;
}
cout<<"YES\n";
int cnt=1,now=2*n,p=0,q=n,u,v;
a[0]=1,a[n]=2,vis[0]=vis[n]=1;
while(cnt<n)
{
if(!vis[(p+1)%(2*n)]) u=(p+1)%(2*n);
else u=(p-1+2*n)%(2*n);
if(!vis[(q+1)%(2*n)]) v=(q+1)%(2*n);
else v=(q-1+2*n)%(2*n);
a[u]=now;now--;
a[v]=now;now--;
vis[u]=vis[v]=1;
if(a[v]<a[p]){
p=v;
q=(p+n)%(2*n);
}
else if(a[p]<a[v]&&vis[(p-1+2*n)%(2*n)]&&vis[(p+1)%(2*n)])
{
p=v;
q=(p+n)%(2*n);
}
cnt++;
}
for(int i=0;i<2*n;i++) cout<<a[i]<<" ";
return 0;
} D. Shortest Cycle
京公网安备 11010502036488号