Codeforces Round #495 (Div. 2)

题目链接:Codeforces Round #495 (Div. 2)


A:最左边和最右边是一定就可以放的,枚举中间的每个间距,特判间距为 2*d 的情况即可。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include
//#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
//#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
#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;
}

你可能感兴趣的:(Codeforces)