题目链接:Codeforces Round #495 (Div. 2)
A:最左边和最右边是一定就可以放的,枚举中间的每个间距,特判间距为 2*d 的情况即可。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n,d,a[110],res;
signed main(){
cin>>n>>d;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=2;i<=n;i++){
if(a[i]-a[i-1]>2*d) res+=2;
else if(a[i]-a[i-1]==2*d) res++;
}
cout<<res+2;
return 0;
}
B:由不等式可知,数量接近时最大,所以直接输出即可。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e3+10;
int n,m,l[N],r[N];
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++) cin>>l[i]>>r[i];
for(int i=1;i<=n;i++) cout<<(i&1);
return 0;
}
C:枚举每个左边机器人到的点,看右边有多少个数字即可,删掉多余的。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,a[N],vis[N],cnt[N],val,res;
inline void insert(int x){
if(!cnt[x]) val++; cnt[x]++;
}
inline void del(int x){
if(--cnt[x]==0) val--;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],insert(a[i]);
for(int i=1;i<=n;i++){
del(a[i]); if(vis[a[i]]) continue;
vis[a[i]]++; res+=val;
}
cout<<res;
return 0;
}