Codeforces Round #494 (Div. 3)未完结

Posted 辉小歌

tags:

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

2022.3.4
题目地址:https://codeforces.com/contest/1003

目录

A. Polycarp’s Pockets【模拟】


按照题意模拟即可。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
set<int>st[N];
int k,n;
int main(void)

	cin>>n;
	for(int i=0;i<n;i++)
	
		int x; cin>>x;
		bool flag=0;
		for(int j=0;j<=k;j++)
			if(st[j].find(x)==st[j].end())
			
				 st[j].insert(x);
				 flag=1;
				 break;
			
		if(!flag) st[++k].insert(x);
	
	cout<<k+1<<endl;
	return 0;

B. Binary String Constructing【构造】


你会发现01010101这种串是 2*4-1010101这种串是 2*3-1
即我们可以先输出一连串的01,或者一连串的10 这个是根据0多还是1多。

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

    cin>>a>>b>>x;
    char c1,c2;
    if(a>b) c1='0',c2='1';//0多 01
    else c1='1',c2='0',swap(a,b);//1多 10
    for(int i=1;i<=x/2;i++) cout<<c1<<c2,a--,b--;
    //前面我们已经输出了奇数个
    if(x%2) //说明剩余的还有偶数个
    
        while(a) cout<<c1,a--;
        while(b) cout<<c2,b--;
    
    else //说明剩余的是奇数个
    
        while(b) cout<<c2,b--;
        while(a) cout<<c1,a--;
    
    return 0;

C. Intense Heat【前缀和】

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
double a[N],s[N],n,k;
int main(void)

	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i];
	double ans=-1e9;
	for(int i=k;i<=n;i++)
	
		for(int j=1;j+k-1<=n;j++)
		
			double temp=(s[j+i-1]-s[j-1])/i;
			if(temp>ans) ans=temp; 
		
	
	printf("%.15lf",ans);
	return 0;

D. Coins and Queries【贪心】

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
map<int,int>mp;
int n,m;
int main(void)

	cin>>n>>m;
	for(int i=1;i<=n;i++)
	
		int x; cin>>x;
		mp[x]++;
	
	while(m--)
	
		int x; cin>>x;
		int sum=0,cnt=0;
		for(int i=30;i>=0;i--)
		
			int u=1<<i;
			if(mp[u]&&sum+u<=x)
			
			    int t=min(mp[u],(x-sum)/u);//尽可能的多拿
				cnt+=t;
				sum=sum+t*u;
			
			if(sum==x) break;
		
		if(sum==x)  cout<<cnt<<endl;
		else puts("-1");
	
	return 0;

E. Tree Constructing【构造树】



先弄好直径,然后除了边界点,中间加入满足条件的树。

#include<bits/stdc++.h>
using namespace std;
int n,d,k,id;//d直径 k度数 
vector<pair<int,int>>ve;
void dfs(int u,int dep,int maxd)

	if(dep==maxd) return;
	for(int i=0;i<k-1-(dep==0) && id<n;i++)
	//dep==0说明是直径上的根节点有俩度
	
		ve.push_back(u,++id);
		dfs(id,dep+1,maxd);
	

int main(void)

	cin>>n>>d>>k;
	if((n <= d) || (d > 1 && k < 2))最基本的条件都不满足
	
        cout << "NO" << endl;
        return 0;
    
	for(int i=1;i<=d;i++) ve.push_back(i,i+1);
	id=d+1;
	for(int i=2;i<=d;i++) dfs(i,0,min(i-1,d-(i-1)));//可以加的最大的深度
	if(id<n) puts("NO");//说有的点不能全部加入
	else
	
		puts("YES");
		for(int i=0;i<ve.size();i++) cout<<ve[i].first<<" "<<ve[i].second<<endl;
	
	return 0;

F. Abbreviation【DP 未完成】


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

Codeforces Round #494 (Div. 3)爆炸记

Codeforces Round #494 (Div. 3) F. Abbreviation

Codeforces Round #494 (Div. 3) D. Coins and Queries (贪心,数学)

Codeforces Round #494 (Div. 3) D. Coins and Queries (贪心,数学)

Codeforces Round #436 E. Fire(背包dp+输出路径)

[ACM]Codeforces Round #534 (Div. 2)