鉴于本人还是个CF黑名小菜鸟,可能写得格式不太好,思路也可能不清晰,
希望能有更多大牛指教指教,#452(DIV 2)还是可以做A 到C 。
A. Splitting in Teams
题解:@1. 给你N个数据, 数据1或2。 3人成一个队。
@2. 1可以随便组队, 但2就不能拆开。
分析: @1, 判断0的情况,
a、全是2 b、 或者 2个1
@2,判断1的情况,
只有可能 n=2, 1个1 和 1个2 3个1
@3,判断其他情况‘、
a、num 2 >= num 1 时只能由1来决定。
b、num 1>=num 2 先把2的全凑合,剩下的1/3.
#include
using namespace std;
int main()
{
int n,a[1000000],vis[3]={0};
scanf("%d",&n);
for(int i=0;i=vis[1])
{
printf("%d\n",vis[1]);
}
else if(vis[1]>vis[2])
{
int ans=vis[2]+(vis[1]-vis[2])/3;
printf("%d\n",ans);
}
return 0;
}
B. Months and Years
题解:先介绍了别人的日历是和国际接轨之后,出了个 n<24 的范围来考我们这些月份是否合法的。
分析:菜鸟没啥好方法,就是懂得暴力求解,把36个月列出来,如果有29天的存在就要特判,
@1、29出现两次,直接不合法,
@2、29出现过一次的话,把36个月中的每个2月都更新一次,记得把原来的还原成28;
#include
using namespace std;
int main()
{
int b[36]=
{
31,28,31,30,31,30,31,31,30,31,30,31,
31,28,31,30,31,30,31,31,30,31,30,31,
31,28,31,30,31,30,31,31,30,31,30,31
};
int n,flag=0,a[30];
scanf("%d",&n);
int vis[35]={0};
for(int i=0;i
C. Dividing the numbers
题解:就是把 1到n 分两份,
第一行输出是 两份求和后 之间的差值,
第二行符合条件的一份 先一个 个数 后是 符合条件的一组数。
做这题时吃了文化的亏,any of them 让我好好琢磨了半天。
才知道原来输出符合条件的一组就可以了。
分析:看图
#include
int main()
{
int i,n,ans[60050];
while(~scanf("%d",&n))
{
if(n%2==0)
{
if((n/2)%2==1)
{
printf("1\n%d ",n/2);
int cnt=1;
for(i=3;i<=n/2&&n!=2;i++)
{
if(i%2==1)
{
ans[cnt++]=i;
ans[cnt++]=n-i+3;
}
}
if(n==2)
{
printf("1\n");
}
else
{
printf("1 ");
}
for(i=1;i