您的位置:首页 > 其它

Educational Codeforces Round 34 (Rated for Div. 2) A-C 题解

2017-12-18 20:45 363 查看
A. Hungry Student Problem

两种方法:

@1.  暴力。

@2.  找规律。

#include<stdio.h>
int main()
{
int i,j,ans[105]={0};
for(i=0;i<=105;i+=3)
{
for(j=0;i+j<105;j+=7)
{
ans[i+j]=1;
}
}
int n;
scanf("%d",&n);
while(n--)
{
int t;
scanf("%d",&t);
if(ans[t]==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;

}
       
#include<stdio.h>
int main()
{
int i,j,ans[105]={0};
for(i=12;i<=105;i++)
{
ans[i]=1;
}
ans[3]=ans[7]=ans[6]=ans[9]=ans[10]=1;
int n;
scanf("%d",&n);
while(n--)
{
int t;
scanf("%d",&t);
if(ans[t]==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;

}
B.
The Modcrab

分析:打怪兽问题,濒血时吃药---加判断,能打死他的话连要都不吃--加判断。剩下的互相残杀。
#include<stdio.h>
#include<string.h>
int main()
{
int h1,h2,a1,a2,c1,ans[100000]={0},step=0,i;
scanf("%d%d%d%d%d",&h1,&a1,&c1,&h2,&a2);
while(h2>0)
{
if(h1-a2<=0&&h2-a1<=0)
{
ans[step++]=1;
h2-=a1;
}
else if(h1-a2<=0)
{
ans[step++]=2;
h1=h1-a2+c1;
}

else
{
ans[step++]=1;
h1=h1-a2;
h2=h2-a1;
}

}
printf("%d\n",step);
for(i=0;i<step;i++)
{
if(ans[i]==1)
printf("STRIKE\n");
if(ans[i]==2)
printf("HEAL\n");
}
return 0;
}

C. Boxes Packing

装箱子问题:
我的做法是先排序一趟,走一趟,

如果遇到一直有同样大小的就停在该箱子大小进行累加,

如果遇到后面的都不相同就 往后跑,

最后把最大值输出即可。

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
int main()
{
int n;
ll vis[5050]={0},a[5050];
ll maxz;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
sort(a,a+n);
int j=0;
ll temp=a[0];
for(int i=0;i<n;i++)
{
if(temp!=a[i])
{
temp=a[i];
vis[++j]++;
}
else
{
vis[j]++;
}
}
if(j==n)
{
printf("1\n");
}
else
{
maxz=vis[0];
for(int i=1;i<=j;i++)
{
maxz=max(maxz,vis[i]);
}
printf("%lld\n",maxz);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: