首页 > 其他分享 >IAEPC Preliminary Contest (Codeforces Round 999, Div. 1 + Div. 2)

IAEPC Preliminary Contest (Codeforces Round 999, Div. 1 + Div. 2)

时间:2025-01-21 21:46:02浏览次数:1  
标签:Contest int 999 cin 100005 delta Div cmp

B. Kevin and Geometry

  • vector的删除,无论是删除单个元素还是区间,一定是传入迭代器,而且区间一定是左闭右开区间
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		vector<int>a(n);
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
		}
		sort(a.begin(),a.end());
		reverse(a.begin(),a.end());
		int maxn=0;
		for(int i=1;i<a.size();i++)
		{
			if(a[i]==a[i-1])
			{
				maxn=a[i];
				a.erase(a.begin()+i-1,a.begin()+i+1);
				break;
			}
		}
		bool f=false;
		for(int i=0;i+1<a.size();i++)
		{
			if(a[i]-a[i+1]<2*maxn)
			{
				f=true;
				cout<<maxn<<" "<<maxn<<" "<<a[i+1]<<" "<<a[i]<<"\n";
				break;
			}
		}
		if(f==false)
		{
			cout<<"-1\n";
		}
	}
	return 0;
}

E. Kevin and And

  • 直接贪心是不对的。因为消2次的最优解未必包含消1次的最优解
  • C++ accumulate:对范围内的元素求和或折叠
  • int __builtin_ctz(unsigned int x) consecutive、tail、zero 可以辅助位运算递推
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int a[100005];
int f[1030],g[100005][15],id[100005]; 
struct t
{
	int delta;
	int i;
};
auto cmp=[](t a,t b)
{
	if(a.delta!=b.delta)
	{
		return a.delta<b.delta;
	}
	return a.i<b.i;
};
priority_queue<t,vector<t>,decltype(cmp) >q(cmp);
int n,m,k;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		cin>>n>>m>>k;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
			for(int j=1;j<=m;j++)
			{
				g[i][j]=a[i];
			}
			id[i]=0;
		}
		long long sum=accumulate(a+1,a+n+1,0ll);
		vector<int>b(m);
		for(int i=0;i<m;i++)
		{
			cin>>b[i];
		}
		f[0]=INT_MAX;
		for(int i=1;i<(1<<m);i++)
		{
			int x=__builtin_ctz(i);
			f[i]=f[i^(1<<x)]&b[x];
			for(int j=1;j<=n;j++)
			{
				int cnt=__builtin_popcount(i);
				g[j][cnt]=min(g[j][cnt],a[j]&f[i]);
			}
		}
		for(int i=1;i<=n;i++)
		{
			q.push((t){a[i]-g[i][1],i});
		}
		while(k--&&q.size())
		{
			t n1=q.top();
			q.pop();
			int i=n1.i;
			id[i]++;
			sum=sum-n1.delta;
			a[i]=a[i]-n1.delta;
			if(id[i]<m)
			{
				q.push((t){a[i]-g[i][id[i]+1],i});
			}
		}
		while(q.size())
		{
			q.pop();
		}
		cout<<sum<<"\n";
	}
	return 0;
}

标签:Contest,int,999,cin,100005,delta,Div,cmp
From: https://www.cnblogs.com/watersail/p/18684013

相关文章

  • Codeforces Round 983 (Div. 2)(EF未改)
    有点爆。感觉自己速度又慢效果又不好。A简单题。最多就尽量让\(1,0\)搭配起;最少就是尽量搭配\(0,0\)和\(1,1\)。B也是简单题,想一下就可以了。首先,想要保证给定的是中位数,最简单的就是比它小的分一组,比它大的分一组,自己分一组。但是因为组长度必须是奇数,所以只有在偶数位......
  • IAEPC Preliminary Contest (Codeforces Round 999, Div. 1 + Div. 2)
    A.KevinandArithmetic题意:给你\(n\)个数,你一开始有一个\(x=0\),每次你让\(x\)加上一个没用过的数,然后\(x\)会一直除二直到变成奇数。如果你加上一个数后能除2,分数加1,问分数最大多少。奇数后面加奇数才能是偶数,但一开始\(x\)是零,那么需要一个偶数,否则只能浪费一个奇数。所......
  • 使用 div 自定义 input 和 textarea
    1.为什么要自定义呢?原生的 input和textarea在某些特定场景下存在功能或兼容性限制,因此使用div元素自定义实现,突破原生输入框在样式、功能、兼容性上的限制。1、解决火狐浏览器换行问题某些版本的火狐浏览器中,原生 textarea 存在回车不换行而显示为空格的问题。这种......
  • Codeforces Round 999 比赛记录
    前情提要这个菜鸡CF上了\(\color{darkcyan}Specialist\),心情大好,正好赶上放假,决定打一场CF。赛时记录A上来脑子抽了,吃了一发罚时。发现写错了一种情况,改过来就过了。感觉并不是一个好的开始。B竟成为本人唯一一遍过的题,虽然写的时候有点慌。CDP。一开始认为空间不够,但发......
  • CF div1+2 999 (A~E)
    赛时三题,\(D\)就差一个显然的剪枝就能过了,qwq...A显然第一步能选偶数就选偶数,之后只能选奇数。细节见代码。codeB对于选取的任意四条边,设腰为\(x\),短边为\(a\),长边为\(b\),则能形成等腰梯形的充要条件为:\(x\)出现次数\(>=2\),且\(a+2*x>b\)。两个腰选最大,并且\(a,b\)尽可能接近......
  • 写一个方法来获取div到浏览器窗口的高度
    在前端开发中,你可以使用JavaScript的getBoundingClientRect()方法来获取一个元素(比如div)相对于浏览器窗口的位置和大小。这个方法返回一个DOMRect对象,其中包含了top、right、bottom和left等属性,分别表示元素各边到视口(viewport)的距离。为了获取一个div元素到浏览器窗口顶部的高度......
  • 2024 (ICPC) Jiangxi Provincial Contest I 题 Neuvillette Circling题解
    简单思路一个圆套中了几个点,如果不断缩小这个圆,那么最终的结果有两种有两个点卡住了这个圆,且这两点一定是直径有三个或者三个以上的点卡住了这个圆,圆心在这三个点围成的三角形的外接圆圆心。因此我们枚举两点作为直径,或者枚举三个点作为圆的内接三角形,求这个三角形的外接圆......
  • 2024 (ICPC) Jiangxi Provincial Contest L 题 Campus 题解
    简单思路首先对于所有的出口求一遍最短路,由于出口只会打开并关闭一次,所以大门的开启状态是相当有限的(最多大概30种),我们对于每一种状态直接暴力求答案最后输出即可。复杂度大概\(O(knlogn)\)参考代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;type......
  • VP AtCoder Beginner Contest 380
    A-123233模拟即可。点击查看代码voidsolve(){intcnt[10]{};intn;std::cin>>n;while(n){ ++cnt[n%10]; n/=10;}for(inti=1;i<=3;++i){ if(cnt[i]!=i){ std::cout<<"No\n&qu......
  • Codeforces Round 998 (Div. 3) 部分题解
    写题解的时候这场在评测,就不放代码了。E.GraphComposition题意给两个无向简单图,对图\(1\)添加若干条边或删除若干条边,使得两图的连通性一致,最少需要变更多少条边。题解求出图\(2\)的连通性,考虑图\(1\)的所有边,若违背了图\(2\)联通性的要删除(图\(2\)不联通但图\(......