首页 > 其他分享 >CF1909题解

CF1909题解

时间:2024-11-06 15:30:03浏览次数:1  
标签:return int 题解 scanf long 二进制 bool CF1909

CF1909A

一眼秒之题,我们发现就是四个方向选三个方向,若是存在一个点它的方向恰好在(0,0)点的另外一个方向,则一定不成立

枚举4个方向,发现有点在这个方向,显然选除这个点之外的三个方向的方案就不可行

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int t,n;
int x[N],y[N];
bool c1(){
	for(int i=1;i<=n;i++){
		if(x[i]<0)  return 0;
	}
	return 1;
}
bool c2(){
	for(int i=1;i<=n;i++){
		if(x[i]>0)  return 0;
	}
	return 1;
}
bool c3(){
	for(int i=1;i<=n;i++){
		if(y[i]<0)  return 0;
	}
	return 1;
}
bool c4(){
	for(int i=1;i<=n;i++){
		if(y[i]>0)  return 0;
	}
	return 1;
}
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		for(int i=1;i<=n;i++){
			scanf("%d%d",&x[i],&y[i]);
		}
		if(c1()||c2()||c3()||c4())  printf("YES\n");
		else  printf("NO\n");
	}
}

CF1909B

看似普及-,实则封神

我们先想到若这些数有奇数也有偶数k直接等于2即可

然而若不是呢?

判断一个数的奇偶只需要看它的二进制最低位是0/1就行

若一个数列全是奇或偶那么必然二进制第一位上全是1或全是0

但是其必然会出现在二进制的某一位上1/0两种都存在

若一个数模上一个 \(2^k\) 那么在2进制下只有 1~k+1位上数是有效的

所以我们只需要找到在二进制表示的数列中,找到最低的一位满足这一位存在0/1即可

这显然可以字典树做,但这道题普及-所以我们暴力枚举 \(2^i\) 即可

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=105,inf=1e18;
int t,n;
int a[N];
bool check(int mod){
	set<int>st;
	for(int i=1;i<=n;i++){
		int z=a[i]%mod;
		st.insert(z);
	}
	if(st.size()!=2)  return 0;
	return 1;
}
signed main(){
	scanf("%lld",&t);
	while(t--){
		int ans=inf;
		scanf("%lld",&n);
		for(int i=1;i<=n;i++){
			scanf("%lld",&a[i]);
		}
		for(int j=0;j<=63;j++){
			int mod=(1ll<<j);
			if(check(mod)){
				printf("%lld\n",mod);
				break;
			}
		}
	}
}

CF19909C

小恶心贪心题

显然我们是要求出来一个降序序列 \(r_i-l_i\) 使得其每一位乘上升序排序的 \(c_i\) 得出来的结果最小

考虑如何构造出对应的 \(l_i\) 和 \(r_i\) 呢?

我们先将 \(l,r\) 序列排好序,然后考虑以下两种组合情况

所以我们只需要让在 \(l_i<r_i\) 这个限制范围内使得 \(l_i\) 尽量接近 \(r_i\),我们可以用栈来解决这个问题

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,cnt,t;
int l[N],r[N],c[N],s[N],ans[N];
bool cmp(int x,int y){
	return x>y;
}
signed main(){
	scanf("%lld",&t);
	while(t--){
		cnt=0;
		scanf("%lld",&n);
		for(int i=1;i<=n;i++){
			scanf("%lld",&l[i]);
		}
		for(int i=1;i<=n;i++){
			scanf("%lld",&r[i]);
		}
		for(int i=1;i<=n;i++){
			scanf("%lld",&c[i]);
		}
		sort(c+1,c+1+n);
		sort(l+1,l+1+n);
		sort(r+1,r+1+n);
		for(int i=1,j=1;i<=n;i++){
			while(l[j]<r[i]&&j<=n){
				s[++cnt]=l[j];
				j++;
			}
			// printf("%lld %lld\n",r[i],s[cnt]);
			ans[i]=r[i]-s[cnt--];
		}
		sort(ans+1,ans+1+n,cmp);
		int tot=0;
		for(int i=1;i<=n;i++){
			tot+=ans[i]*c[i];
		}
		printf("%lld\n",tot);
	}
}

标签:return,int,题解,scanf,long,二进制,bool,CF1909
From: https://www.cnblogs.com/zcxnb/p/18530323

相关文章

  • 题解:P7082 [NWRRC2013] Dwarf Tower
    涉及知识点:动态规划。解题思路设\(dp_i\)为得到\(i\)最小的花费。可以得到转移方程:\(dp_{a_i}=\min(dp_{x_i}+dp_{y_i},dp_{a_i})\)。很明显最多迭代\(n\)次,还需要再外面套一个循化即可。但是有些OJ没有洛谷跑得快,所以需要加一点优化。如果当前循环没有更新......
  • 【题解】CF1956
    CF1956A简要题意有\(n\)个人玩一个游戏,把这\(n\)个人分别编号为\(1\)到\(n\)。每一轮,编号为\(a_1,a_2,\ldots,a_k\)(\(a\)序列递增)的人会被踢出这个游戏,剩下的人会补齐空位并重新从\(1\)开始编号。当某一轮没有人被踢出时,游戏结束,剩下没有被踢出的人成为......
  • “SSL 证书验证失败”问题解决方法“urllib.error.URLError: <urlopen error [SSL: CER
    第一部分:问题描述第二部分:解决方法错误的代码:dataset_train=datasets.MNIST('../data/mnist/',train=True,download=True,transform=trans_mnist)dataset_test=datasets.MNIST('../data/mnist/',train=False,download=True,transform=trans......
  • P6667 [清华集训2016] 如何优雅地求和 题解
    一道非常有启发性的题目。思路考虑对于一个给出点值的多项式函数如何处理。我们发现,对于一个\(m\)次多项式\(f(x)\),由于\(\binom{x}{i}\)为\(i\)次多项式,所以说我们必定可以把一个多项式函数写成如下模样:\[F(k)=\sum_{i=0}^m\binom{k}{i}f_i\]可以看出,\(f_i\)实际上......
  • CSP-J2024题解
    T1扑克牌本题要求:在给定的扑克牌的基础上,还需要多少张牌可以让扑克牌凑成一整套,试题中读入的字符串每个都代表一张合法的扑克牌。可以使用C++STL中的set(集合)完成本题。这是因为,set可以自动去重,去除重复的牌(字符串)后,剩下的字符串就是实际拥有的不同的牌。而一副扑克牌有......
  • ABC378 E 题解
    ABC378E题解题意给定序列\(A\),求\(\sum_{1\lel\ler\len}(\sum_{l\lei\ler}A_i\modM)\)计算所有区间和取模之后的结果再求和。注意外层是没有取模的。如果是外层也要取模的情况,那还是十分好办的,直接贡献法计算每个数字被统计了多少次就可以了。问题就在于外层没......
  • 2024强网杯web题解
    PyBlocklyfromflaskimportFlask,request,jsonifyimportreimportunidecodeimportstringimportastimportsysimportosimportsubprocessimportimportlib.utilimportjsonapp=Flask(__name__)app.config['JSON_AS_ASCII']=Falseblacklis......
  • 2024newstarweb题解
    w1headach3会赢吗源码flag碎片X1:ZmxhZ3tXQTB3再次查看源码flag碎片X2:IV95NF9yM2Fs第三个页面也是直接查看源码直接改源码flag碎片X3:MXlfR3I0c1B下一个页面直接禁用jsflag碎片X4:fSkpKcyF9ZmxhZ3tXQTB3IV95NF9yM2FsMXlfR3I0c1BfSkpKcyF9base64解码即......
  • WPF程序弹出页中按钮在触摸屏(电容屏)上点击事件需要点十次才能触发的问题解决方法
    一、事件背景介绍1.功能简述:主页面是一个DataGrid列表,点击DataGrid行,弹出子页面;子页面根据数据加载多个Button按钮,如下图,就是这个页面中的按钮,在触摸屏上触摸点击,需要点击十次才能成功,使用鼠标点击一下就能成功。 主要代码如下://WPF前端<DataGridx:Name="scanDtl......
  • P11236 「KTSC 2024 R1」水果游戏 题解
    很有意思的一道题。思路首先将相邻一样的数合并,每个元素变成一个二元组,表示数与出现次数。考虑什么时候不能合并。我们发现假如充分合并后,现在有连续的三个数\(x_1,x_2,x_3\),以及他们各自的出现次数\(y_1,y_2,y_3\)。如果\(x_1>x_2,x_3>x_2\)。我们想要合并这三个,必须要......