欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

「EZEC」 Round1 开学信心赛 总结

程序员文章站 2022-03-14 19:28:14
...

EZEC「EZEC」 Round1Round1 开学信心赛 总结

这次比赛我考了245245分,还算可以,因为这次题目太变态了。
这次我只讲一下前四题我的想法。
后面两题太变态了。

第一题:「EZEC-1」成绩

解题方法

这道题直接模拟。
数据很良心,没有出一些毒瘤数据。

得分情况

比赛时满分。

代码

注:它的数据太水,如果出毒瘤一点,我肯定卡不过。

#include<bits/stdc++.h>
using namespace std;
char a[10001];
int n,ck;
void dg(int x)
{
	cout<<"0.";
	for(int i=1;i<=x-1;i++)
		cout<<"0";
	cout<<"1";
}
void dg1(int x)
{
	cout<<"1";
	for(int i=1;i<x;i++)
		cout<<"0";
}
int main()
{
	scanf("%s",a+1);
	n=strlen(a+1);
	for(int i=1;i<=n;i++)
	{
		if(a[i]=='.')
		{
			ck=i;
			break;
		}
	}
	if(ck==0)
	{
		int j=n;
		for(int i=1;i<=n;i++)
		{
			if(a[i]=='0') 
			{
				j--;
				continue;	
			}
			cout<<a[i]<<'*';
			dg1(j);
			if(i!=n) cout<<'+';
			j--;
		}
		return 0;
	}
	int j=ck-1;
	for(int i=1;i<=ck-1;i++)
	{
		if(a[i]=='0') 
		{
			j--;
			continue;	
		}
		cout<<a[i]<<'*';
		dg1(j);
		cout<<'+';
		j--;
	}
	j=1;
	for(int i=ck+1;i<=n;i++)
	{
		if(a[i]=='0') 
		{
			j++;
			continue;	
		}
		if(i==n)
		{
			cout<<a[i]<<'*';
			dg(j);
		}
		else
		{
			cout<<a[i]<<'*';
			dg(j);
			cout<<'+';
		}
		j++;
	}
}

第二题:「EZEC-1」出题

解题方法

对于k=0k=0的做法,直接跑一遍0101背包。
对于n10n\leq10的做法,直接暴力搜索。
对于9090分的做法,直接根据搜索做成dpdp
对于满分的做法,当所有时间小于等于mm时,直接贪心(不知道为什么要特判这种情况)。

得分情况

这题有毒瘤数据。
很多人卡9090分,包括我。
为啥最后一个点要贪心?
我在比完赛加了个特判,满分,what ?

代码

这是满分的代码。

#include<bits/stdc++.h>
using namespace std;
long long n,m,k,a[1001],b[1001],ans,f[4][1001][1001],s;
bool cmp(long long a,long long b)
{
	return a>b;
}
int main()
{
	cin>>n>>m>>k;
	for(long long i=1;i<=n;i++) cin>>a[i]>>b[i],s+=b[i];
	if(s<=m)
	{
		sort(a+1,a+1+n,cmp);
		for(long long i=1;i<=k;i++) ans+=a[i]*2;
		for(long long i=k+1;i<n;i++) ans+=a[i];
		cout<<ans;
		return 0;
	}
	for(long long i=1;i<=n;i++)
	{
		for(long long p=m;p>=b[i];p--)
		{
			for(long long l=0;l<=k;l++)
			{
				f[0][l][p]=max(f[0][l][p],f[0][l][p-b[i]]+a[i]);
				if(l>0) f[0][l][p]=max(f[0][l][p],f[0][l-1][p-b[i]]+a[i]*2);
				f[1][l][p]=max(f[1][l][p],f[0][l][p]);
				if(l>0) f[1][l][p]=max(f[1][l][p],f[1][l-1][p-b[i]]+a[i]*2);
			}
		}
	}
	cout<<f[1][k][m];
}

第三题:「EZEC-1」甜品

解题方法

对于3535分的方法(最后一个数据卡过),直接暴力搜索。
对于满分的方法,dpdp,不懂系列。

得分情况

比赛时3535分。
我想打记忆化,可是没打成。
注意:要用scanfscanfprintfprintf才能拿到3535分,最好用O2O2。否则只能3030分。

第四题:「EZEC-1」数列

解题方法

对于2020分的方法,直接暴力。
后面不懂。

得分情况

比赛时2020分。

相关标签: 比赛总结