Codeforces Beta Round #4 (Div. 2)完结

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Beta Round #4 (Div. 2)完结相关的知识,希望对你有一定的参考价值。

2022.3.3
题单地址:https://codeforces.com/contest/4

目录

A. Watermelon【思维】


先切一个2,在看剩余的是二的倍数不是即可。

#include<bits/stdc++.h>
using namespace std;
int main(void)

	int n; cin>>n;
	n-=2;
	if(n>0&&n%2==0) puts("YES");
	else puts("NO");
 

B. Before an Exam【贪心】

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,l[N],r[N],sl[N],sr[N];
int main(void)

	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>l[i]>>r[i],sl[i]=sl[i-1]+l[i],sr[i]=sr[i-1]+r[i];
	if(sr[n]<m||m<sl[n]) puts("NO");//小于最少需要的,或者大于最大的需要的
	else
	
		puts("YES");
		for(int i=1;i<=n;i++)
		
			m=m-l[i];
			if(m>sr[n]-sr[i]) //剩余的还大于剩余的最大值
			
				int temp=min(r[i],l[i]+m-(sl[n]-sl[i]));//拿个最可能拿的,且剩余的还满足后面的需求
				cout<<temp<<" ";
				m=m-(temp-l[i]);
			else cout<<l[i]<<" ";
		
	
	return 0;

C. Registration system【哈希表】

#include<bits/stdc++.h>
using namespace std;
int n;
map<string,int>mp,st; 
int main(void)

	cin>>n;
	while(n--)
	
		string s; cin>>s;
		if(mp.count(s)!=0) cout<<s<<mp[s]<<endl;
		else cout<<"OK"<<endl;
		mp[s]++; 
	
	return 0;

D. Mysterious Present【DP最长上升子序列的变种】


这道题猛地以看特别像最长上升子序列,但是又有点不同就是它是有俩属性的。
那么我们可以先将第一属性从小到大排序,再将属性从大到小排序。
然后跟基本的上升子序列一样,不过比较俩属性就行了。
注意保存转移的过程,只有更优的时候才保存路径,不然会路径混乱。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*5+10;
struct nodeint w,h,id;s[N];
bool cmp(node a,node b)

	if(a.w==b.w) return a.h<b.h;
	return a.w<b.w;

int n,w1,h1;
int main(void)

	cin>>n>>w1>>h1;
	for(int i=1;i<=n;i++)
	
		cin>>s[i].w>>s[i].h;
		s[i].id=i;
	
	sort(s+1,s+n+1,cmp);
	int f[N]=0,path[N]=0;
	for(int i=1;i<=n;i++)
	
		if(s[i].h<=h1||s[i].w<=w1) continue;//说明比要求的最基础的还小
		f[i]=1;
		for(int j=1;j<i;j++)
		
			if(s[j].h<s[i].h&&s[j].w<s[i].w&&f[i]<f[j]+1)//只有更优才保存路径
			
				path[i]=j;
				f[i]=max(f[i],f[j]+1);
			
		
	
	int ans=0,u;
	for(int i=1;i<=n;i++) 
		if(f[i]>ans) ans=f[i],u=i;
	vector<int>ve;
	while(u)
	
		ve.push_back(s[u].id);
		u=path[u];
	
	cout<<ans;
	if(ans==0) return 0;
	cout<<endl;
	for(int i=ve.size()-1;i>=0;i--) cout<<ve[i]<<" ";
	return 0;

以上是关于Codeforces Beta Round #4 (Div. 2)完结的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Beta Round 84 (Div. 2 Only)

2017-4-16-Train:Codeforces Beta Round #4 (Div. 2 Only)

Codeforces Beta Round #6 (Div. 2)未完结

Codeforces Beta Round #4 (Div. 2 Only) D. Mysterious Present(LIS)

Codeforces Beta Round#2

Codeforces Beta Round #7