首页 > 其他分享 >CF1875

CF1875

时间:2023-10-25 19:33:36浏览次数:42  
标签:maxx int MAX CF1875 cin long INT

A Jellyfish and Undertale

这个直接顺着选就好了,能过

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=105;
int x[maxn];
int t;		
int a,b,n;
signed main(){
    ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--){
		memset(x,0,sizeof(x));
		cin>>a>>b>>n;
		for(int i=1;i<=n;i++) cin>>x[i];
		int tim=b;
		for(int i=1;i<=n;i++){
			if(1+x[i]<=a) tim+=x[i];
			else tim+=(a-1);
		}
		cout<<tim;
		cout.put('\n');
	}
	return 0;
}

B Jellyfish and Game

U1S1我打的时候是div2B啊,咋变A了,不懂,不管给他当1875B了(1874B题解都看不懂...)
分类讨论一下最大值最小值就可以显然的得出二者的选择策略,然后就应该很好处理了

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
int n,m;
const int maxn=55;
int a[maxn];
int b[maxn];
int minn=INT_MAX,minna=INT_MAX,minnb=INT_MAX,maxx,maxxa,maxxb;
signed main(){
    ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--){
		int n,m,k;
		cin>>n>>m>>k;
		minn=INT_MAX,minna=INT_MAX,minnb=INT_MAX,maxx=0,maxxa=0,maxxb=0;
		int sum1=0,sum2=0;
		int maxid=0,minid=0;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			sum1+=a[i];
			if(a[i]>maxx){
				maxid=1;
				maxx=a[i];
			}
			maxxa=max(a[i],maxxa);
			minna=min(a[i],minna);
			if(a[i]<minn){
				minid=1;
				minn=a[i];
			}
		}
		for(int i=1;i<=m;i++){
			cin>>b[i];
			if(b[i]>maxx){
				maxid=2;
				maxx=b[i];
			}
			maxxb=max(b[i],maxxb);
			minnb=min(b[i],minnb);
			if(b[i]<minn){
				minid=2;
				minn=b[i];
			}
		}
		if(maxxb<minna){
			if(k%2==1) cout<<sum1<<'\n';
			else cout<<sum1+minnb-maxxa<<'\n';
		}
		else if(maxid==1&&minid==1){
			if(k%2==1) cout<<maxxb-minn+sum1<<'\n';
			else cout<<maxxb-maxx+sum1<<'\n';
		}
		else if(maxid==1&&minid==2){
			if(k%2==1) cout<<sum1+maxxb-minna<<'\n';
			else cout<<sum1+maxxb-minna-maxx+minn<<'\n';
		}
		else if(maxid==2&&minid==1){
			if(k%2==1) cout<<sum1+maxx-minn<<'\n';
			else cout<<sum1<<'\n';
		}
		else{
			if(k%2==1) cout<<sum1+maxx-minna<<'\n';
			else cout<<sum1+minn-minna<<'\n';
		}
	}
	return 0;
}

C Jellyfish and Green Apple

很显然可以想到,每个人分到的苹果要么是整数要么是 \(\frac{x}{1<<y}\) 的模式所以无解应该很好判断,然后我们在考虑如何计算答案,由于已经知道有多少个苹果了所以只要苹果能分的话我们就分给每个人,否则的话我们就给所有苹果切一刀,然后再分,证明一下,这其实就相当于给分数形式分子分母都放大了,如果每个人都收到了等量的 \(\frac{1}{(1<<y)}\) 这样就保证了正确性,最优的话因为每个人都收到一样的份数,所以当你要切时必然不可能只切一部分否则就证明上回切少了对吧

#include<bits/stdc++.h>
using namespace std;
#define int long long
map<int,int>mp;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	for(int i=0;i<=30;i++) mp[1<<i]=1;
	int t;
	cin >>t;
	while(t--){
		int n,m;
		cin>>n>>m;
		int nn=n,mm=m;
		int now=__gcd(n,m);
		if(!mp[m/now]){
			cout<<"-1"<<'\n';
			continue;
		}
		int ans=0;
		nn%=m;
		while(nn){
			ans+=nn;
			nn*=2;
			if(nn>=m) nn%=m;
		}
		cout<<ans<<'\n';
	}
	return 0;
}

标签:maxx,int,MAX,CF1875,cin,long,INT
From: https://www.cnblogs.com/jt0007/p/17787964.html

相关文章

  • CF1875B
    赛时没打……题意:给定\(T\)组数据,每组数据给定\(n\)。要求构造一个长度为\(n\)的单调上升序列满足\((3\timesa_{i})\bmod(a_{i-1}+a_{i-2})\ne0\)。首先我们运用幼儿园知识奇偶性可得奇数加奇数等于偶数奇数加偶数等于奇数奇数乘奇数等于奇数所......
  • CF1875B Jellyfish and Game
    思路题意大概是两人都有一组数,奇数轮,第一个人可以选择和第二个人交换一个数字也可以不换,偶数轮,第二个人可以选择和第一个人交换一个数字也可以不换。首先可以猜测,我们每次都应该选择交换对方的最大值和自己的最小值,如果自己的最小值都比对方大的话就不交换。应该比较好想,这里感......
  • CF1875D Jellyfish and Mex
    思路看到\(n\)的范围只有\(5000\),并且\(\sumn\)的范围也是\(5000\),所以可以考虑\(n^2\)的做法。每次操作肯定都是一次性删完某个数字,如果删除某个数字删一半又去删别的数字,答案肯定会变大。所以我们可以考虑统计所有数字的数量,记为\(num_i\),来计算删完某个数字的最小......
  • CF1875C Jellyfish and Green Apple
    思路首先我们可以考虑把能分的都先分了,再选择去切剩下的苹果。那么我们只需要考虑苹果数量少于人数的情况,每个人能分的苹果都必然少于目前的单个苹果,所以每个苹果都必须切一刀,那么答案数就会增加当前的数量,再把能分的都分了,重复这一过程,直到分完为止。这样去切一定是最优的。那......
  • 题解 CF1875D【Jellyfish and Mex】
    显然,除非\(\operatorname{mex}a=0\),否则不会删除\(>\operatorname{mex}a\)的数。而\(\operatorname{mex}a=0\)时不对答案产生贡献,因此任意时刻我们都可以忽略\(a\)中\(>\operatorname{mex}a\)的数。又显然,一旦我们开始删一个数,就会先把所有与之相等的数删光。否则,设最先......