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