「EZEC」 Round1 开学信心赛 总结
程序员文章站
2022-03-14 19:28:14
...
开学信心赛 总结
这次比赛我考了分,还算可以,因为这次题目太变态了。
这次我只讲一下前四题我的想法。
后面两题太变态了。
第一题:「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」出题
解题方法
对于的做法,直接跑一遍背包。
对于的做法,直接暴力搜索。
对于分的做法,直接根据搜索做成。
对于满分的做法,当所有时间小于等于时,直接贪心(不知道为什么要特判这种情况)。
得分情况
这题有毒瘤数据。
很多人卡分,包括我。
为啥最后一个点要贪心?
我在比完赛加了个特判,满分,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」甜品
解题方法
对于分的方法(最后一个数据卡过),直接暴力搜索。
对于满分的方法,,不懂系列。
得分情况
比赛时分。
我想打记忆化,可是没打成。
注意:要用和才能拿到分,最好用。否则只能分。
第四题:「EZEC-1」数列
解题方法
对于分的方法,直接暴力。
后面不懂。
得分情况
比赛时分。