首页 > 编程语言 >ybtoj:贪心算法

ybtoj:贪心算法

时间:2024-11-14 20:58:57浏览次数:1  
标签:std int ybtoj namespace 算法 ans using include 贪心

A:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,a,b;
priority_queue <int> q;
int sum=0;

int main()
{
	scanf("%d%d%d",&n,&a,&b);
	
	//cin>>n>>a>>b;
	for(int i=1;i<=n;i++)
	{
		int x;
		
		cin>>x;
		q.push(x);
		
	}
	
	while(q.top()-sum*a>0)
	{
		sum++;
		int x=q.top();
		x-=b;
		q.pop();
		
		q.push(x);
		
		
	}
	cout<<sum<<endl;
	return 0;
} 

B:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1003;
int x[N],y[N],n,d,ans;

struct part{
	double l,r;
	
}a[N];

bool operator<(part a,part b){
	return a.r<b.r;
}

inline void work(){
	for(int i=1;i<=n;i++){
		cin>>x[i]>>y[i];
	}
	for(int i=1;i<=n;i++){
		if(d<y[i]){
			ans=-1;
			return;
		}
		a[i].l=x[i]-sqrt(1ll*d*d-1ll*y[i]*y[i]);
		a[i].r=x[i]+sqrt(1ll*d*d-1ll*y[i]*y[i]);
	}
	sort(a+1,a+1+n);
	ans=1;
	double pos=a[1].r;
	for(int i=2;i<=n;i++){
		if(a[i].l<=pos && pos<=a[i].r) continue;
		else ans++,pos=a[i].r;
	}
}
int main(){


		cin>>n>>d;

		if(n==d && d==0){
			return 0;
		}
		work();
		printf("%d\n",ans);
	return 0;
}

C:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=50005;
struct cow{
	int l,r;
	int id;
	bool operator<(const cow &a) const{
		return l<a.l;
	}
}a[N];

int ans[N];
struct Node{
	int r;
	int id;
	Node(int a,int b):r(a),id(b){}
	bool operator<(const Node &a) const{
		return a.r<r;
	}
	
};
int n;

int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i].l>>a[i].r,a[i].id=i;
	sort(a+1,a+n+1);
	priority_queue<Node> q;
	for(int i=1;i<=n;i++){
		if(!q.size() || q.top().r>=a[i].l){
			ans[a[i].id]=q.size()+1;
			q.push((Node){a[i].r,q.size()+1});
			
		}else{
			ans[a[i].id]=q.top().id;
			q.pop();
			q.push((Node){a[i].r,ans[a[i].id]});
			
		}

	}
	cout<<q.size()<<"\n";
	for(int i=1;i<=n;i++){
		cout<<ans[i]<<"\n";
	}
	return 0;
}

D:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct node{
	ll w,h;
	node(){w=0,h=0;}
	node(ll w,ll h):w(w),h(h){}
	bool operator <(const node &a) const {return a.w==w ? h>a.h : w>a.w;}
	
};
ll ans;
priority_queue<node> q;

int main(){
	ll n,k;
	ans=0;
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++){
		ll w;
		scanf("%lld",&w);
		q.push(node(w,1));
		
	}
	while((q.size()-1)%(k-1)!=0) q.push(node(0,1));
	while(q.size()>=k){
		ll h=-1;ll w=0;
		for(int i=1;i<=k;i++){
			node t=q.top();
			q.pop();
			h=max(h,t.h);
			w+=t.w;
		}
		ans+=w;
		q.push(node(w,h+1));
	}
	printf("%lld\n%lld\n",ans,q.top().h-1);
	
	return 0;
}

E:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
struct w{
	int n,v;
}ww[1003];
bool cmp(w a,w b)
{
	return a.v<b.v;
	
}
int main()
{
	int n;
	cin>>n;
	
	for(int i=1;i<=n;i++)
	{
		cin>>ww[i].v;
		ww[i].n=i;
		
	}
	
	sort(ww+1,ww+n+1,cmp);
//	for(int i=1;i<=n;i++)
//	{
//		cout<<ww[i].n<<endl;
//		
//	}
	double t=0;
	for(int i=1;i<=n;i++)
	{
		cout<<ww[i].n<<" ";
		t+=(ww[i].v)*(n-i);
		//cout<<t<<"    ";
	}
	printf("\n%.2lf",1.0*t/n);
	
	return 0;
}

F:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,sum=0;
struct tr{
	int hei;
	int seat;
	
}tree[100005];
bool cmp(tr a,tr b){
	return a.seat<b.seat;
	
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>tree[i].seat>>tree[i].hei;
		
	}
	sort(tree+1,tree+n+1,cmp);
	for(int i=1;i<=n;i++){
		if(i==1) sum+=max(0,tree[i].hei-(tree[i+1].seat-tree[i].seat));
		else if(i==n) sum+=max(0,max(0,tree[i].hei-(tree[i].seat-tree[i-1].seat)));
		
		else sum+=max(0,max(tree[i].hei-(tree[i].seat-tree[i-1].seat),tree[i].hei-(tree[i+1].seat-tree[i].seat)));
		
	}
	cout<<sum<<endl;
	return 0;
}

G:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n;
const int N=1e6+1;
int a[N];
int b[N];
int x=0;
int sta[N];

int main(){
	
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	b[n]=a[n];
	for(int i=n-1;i>=1;i--){
		b[i]=a[i];
		b[i]=max(b[i+1],b[i]);
	}
//	for(int i=1;i<=n;i++){
//		cout<<b[i]<<" ";
//	}
	int wh=0;
	for(int i=1;i<=n;i++){
		sta[++wh]=a[i];
		while(sta[wh]>b[i+1]){
			printf("%d ",sta[wh--]);
		}
	}
	while(wh) printf("%d ",sta[wh--]);
	
	

	return 0;
}

H:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int f=1,lzx=0;
	char c=getchar();
	while(c>'9' || c<'0'){
		if(c=='-'){
			f=-f;
		}
		c=getchar();
	}	
	//c=getchar();
	while(c<='9' && c>='0'){
		lzx=lzx*10+c-'0';
		c=getchar();
	}
	return lzx*f;
	
}
const int N=1e6+10;
int a[N],sum[N],flag[N];

int main(){//
	int n=read(),k=read(),ans1=0,ans2;
	//cout<<n;
	for(int i=1;i<=n;i++){
		a[i]=read();
		ans1 |= a[i];
	}
	for(int i=30;i>=0;i--){
		int op=0;
		for(int j=1;j<=n;j++){
			sum[j]=0;
		}
		for(int j=1;j<=n;j++){
			if((a[j] & (1<<i))==0){
				sum[max(j-k+1,1)]++;
				sum[j+1]--;
			}
		}
		for(int j=2;j<=n;j++){
			sum[j]+=sum[j-1];
		}
		for(int j=1;j+k-1<=n;j++){
			if(flag[j]) continue ;
			if(!sum[j]) op++ ;
		}
		for(int j=1;j+k-1<=n;j++){
			if(flag[j]) continue ;
			if(op && sum[j]) flag[j]=1;
		}
	}
	
	for(int i=1;i+k-1<=n;i++){
		if(!flag[i]){
			ans2=a[i];
			for(int j=i+1;j<=i+k-1;j++){
				ans2 &= a[j];
			}
			break;
		}
	}
	
	cout<<ans1<<" "<<ans2<<"\n";
	return 0;
}

I:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+4;
vector<int> g[N];
int n,m,ans,q;
bool bo[N];
struct point{
	int l,r;
	bool operator<(const point &x) const{
		return r<x.r;
	}
	
}a[N];
int x,y,i,j,k;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	while(m--){
		cin>>x>>y;
		if(x>y) swap(x,y);
		if(y==x+1) bo[x]=1;
		g[x].push_back(y);
	}
	for(i=1;i<n;i=j+1){
		if(!bo[i]){
			j=i;
			continue;
		}
		j=i;
		while(bo[j+1] && j<n){
			j++;
		}
		int cnt=j-i+1;
		q=0;
		for(k=i;k<=j;k++){
			int len=g[k].size();
			for(int h=0;h<len;h++){
				int v=g[k][h];
				if(v<=j+1 && v!=k+1) a[++q]=(point){k,v};
			}
		}
		sort(a+1,a+q+1);
		int r=0;
		for(k=1;k<=q;k++){
			if(a[k].l>=r){
				r=a[k].r;
				cnt++;
			}
			ans=max(ans,cnt);
		}
		
	}
	cout<<ans<<"\n";
	return 0;
}

标签:std,int,ybtoj,namespace,算法,ans,using,include,贪心
From: https://www.cnblogs.com/cathyzro/p/18546811

相关文章

  • Java常见排序算法详解:快速排序、插入排序与冒泡排序
    在程序设计中,排序是最基本的操作之一。Java提供了多种排序算法,今天我们将介绍三种常见的排序方法:快速排序、插入排序和冒泡排序。我们不仅会分析它们的基本原理,还会提供实际的代码实现,帮助大家更好地理解并应用这些排序算法。一、快速排序(QuickSort)快速排序是一种分治法的排......
  • 代码随想录算法训练营第一天| 704. 二分查找、35.搜索插入位置、27. 移除元素、977.有
    文档讲解:代码随想录视频讲解:代码随想录状态:完成4道题一、数组理论基础数组:连续内存空间,存储类型相同的元素集合,适合读不适合写注意:Python里可以存储不同类型的元素,但刷题时都是按照相同元素去做的相同元素占用存储的空间大小是一样的,下一个元素的位置就确定了数组时间......
  • 代码随想录算法训练营第二天| 209.长度最小的子数组、59. 螺旋矩阵 II
    文档讲解:代码随想录视频讲解:代码随想录状态:完成2道题滑动窗口滑动窗口:两个指针一前一后组成滑动窗口,并计算滑动窗口中的元素的问题适用场景:字符串匹配问题、子数组问题、定长问题滑动窗口模板:如果一个字符进入窗口,应该增加windows计数器;如果一个字符将移除窗口的......
  • java的算法-余弦相似度
    背景:做过财务系统的小伙伴们都知道,财务系统会有一个自动计费的算法,这个算法依赖于计费模板,之前的同事呢把计费公式乱写(导致很多重复的公式),虽然计费名称不一样但是计费公式却是一样的,今天就写一个算法来计算公式代码之间的相似度publicstaticvoidmain(String[]args){......
  • (算法)买卖股票的最佳时机————<贪心算法>
    1.题⽬链接:121.买卖股票的最佳时机2.题⽬描述:3.解法(贪⼼):贪⼼策略:由于只能交易⼀次,所以对于某⼀个位置i,要想获得最⼤利润,仅需知道前⾯所有元素的最⼩值。然后在最⼩值的位置「买⼊」股票,在当前位置「卖出」股票即可。C++算法代码: classSolution{public:......
  • 代码随想录算法训练营第三十天| 452. 用最少数量的箭引爆气球 、435. 无重叠区间 、76
    452.用最少数量的箭引爆气球思路:以前做过最大不相交子序列的题,这次也是往这根据某一端排序的思路想的,排序后如下图,只需要维护一个公共序列的右边界r就可以了,下一次判断时,只需要判断子区间的左边是否小于r。这个题有点坑的是使用Arrays排序,如果使用昨天的方法:Arra......
  • cmu15545笔记-排序和聚合算法(Sorting&Aggregation Algorithms)
    目录概述排序堆排序外部归并排序使用索引聚合操作排序聚合哈希聚合概述本节和下一节讨论具体的操作算子,包括排序,聚合,Join等。排序为什么需要排序操作:关系型数据库是无序的,但是使用时往往需要顺序数据(OrderedBy,GroupBy,Distinct)。主要矛盾:磁盘很大:要排序的数据集很大,内......
  • 跟贪心杂题爆了
    基本都抄的,窝怎么这么渺小啊AGC007F这种匹配可行性基本都是从后往前贪心,这样没有后效性。而我们考虑原序列的每个字符都对应了最后序列的一个区间(如果用上)。考虑把整个变化过程写成一个矩阵,并且将每个字符染上不同颜色。像这样:容易发现对于一条新的路径,我们尽可能与上一条......
  • 智慧园区算法视频分析服务器垃圾桶溢满园区算法详解及应用
    在数字化转型的浪潮中,视频监控技术已成为各行各业提升安全管理、优化运营效率的重要工具。特别是对于城管、环卫、教育、水利、园区、小区等多样化的应用场景,一个集成化、智能化的视频监控解决方案显得尤为关键。智慧园区算法视频分析服务器不仅能够提供高清视频监控接入,还能进行......
  • 代码随想录算法训练营 | 200.岛屿的数量
    岛屿的数量题目链接:https://leetcode.cn/problems/number-of-islands/此题目要点:dfs和bfs都可以解决此题,但是使用dfs代码会更加的简洁首先对grid进行遍历,每一个节点都进行检查,判断是否是1(陆地)如果是,则进行dfs深搜,并将所有搜到的岛屿节点全置为0,表示此块岛屿已经被搜过了,防......