Codeforces Round #499 (Div. 2)

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


A:肯定从小到大开始放最优。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n,k,pre,res,cnt;	string str;
signed main(){
	cin>>n>>k;
	cin>>str;	sort(str.begin(),str.end());
	for(int i=0;i<n&&cnt<k;i++){
		if(str[i]>pre+1)	cnt++,res+=str[i]-'a'+1,pre=str[i];
	}
	if(cnt==k)	cout<<res;
	else	cout<<-1;
	return 0;
}

B:可以暴力枚举能不能过x天,当然这个具有二分性,二分更快。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=110;
int n,m,a[N],l,r,vis[N];
int cmp(int a,int b){return a>b;}
inline int check(int mid){
	memset(vis,0,sizeof vis);	int res=0;
	for(int i=1;i<=m;i++)	vis[a[i]]++;	sort(vis+1,vis+101,cmp);
	for(int i=1;i<=100;i++){
		if(!vis[i])	continue;	res+=(vis[i]/mid);
	}
	return res>=n;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++)	cin>>a[i];	r=m;
	while(l<r){
		int mid=l+r+1>>1;
		if(check(mid))	l=mid;
		else	r=mid-1;
	}
	cout<<l;
	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=1e3+10;
int n,m;	double a[N],b[N];
inline bool check(double mid){
	double tot=m+mid;
	for(int i=1;i<=n;i++){
		double up=tot/a[i];
		if(tot-m<up)	return 0;	tot-=up;
		double down=tot/b[(i==n?1:i+1)];
		if(tot-m<down)	return 0;	tot-=down;
	}
	return tot>=m;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)	cin>>a[i]>>b[i];
	double l=0,r=2e9;
	for(int i=1;i<=100;i++){
		double mid=(l+r)/2;
		if(check(mid))	r=mid;
		else	l=mid;
	}
	if(l>1e9)	return puts("-1"),0;
	printf("%.10lf\n",l);
	return 0;
}

E:贝祖定理,贝祖定理可知若 a1x1+a2x2+…+an*xn==c,则 c|gcd(a1,a2,a3…an);

所以ans=(gcd*(0->k-1))%k;

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,gd;	set<int> res;
signed main(){
	cin>>n>>k;
	for(int i=1,x;i<=n;i++)	cin>>x,gd=__gcd(gd,x);
	for(int i=0;i<k;i++)	res.insert((gd*i)%k);
	cout<<res.size()<<'\n';
	for(int x:res)	cout<<x<<' ';
	return 0;
}
Codeforces Round #499 (Div. 2)Codeforces Round #499 (Div. 2) 青烟绕指柔! 发布了459 篇原创文章 · 获赞 240 · 访问量 2万+ 私信 关注
上一篇:CF1054H Epic Convolution


下一篇:某乎用户学历大曝光:世界500强CEO某乎占499,还有一个是匿名