Codeforces Round #298 (Div. 2) A. Exam(水)

博客探讨了Codeforces Round #298 (Div. 2) A. Exam问题,学生编号不能相邻,求合法安排的最大人数。提供了解题思路和C++代码实现,包括特殊情况处理和一般情况下的座位插入策略。
摘要由CSDN通过智能技术生成

题意:N 个学生 编了号,  然后第i个学生不能和第i+1和第i-1坐在一起,问合法的情况下最多坐多少个人,如何做

题解: 

水题YY了一下,打表处理前三种    后面的情况就是在第三种情况下往前后插数字   奇数在后  偶数在前,然后没了


代码:

#include<stdio.h>
#include<string.h>
int main()
{
   int n, mymap[5005];
   int mark[3][4] = {{1, 1}, {1, 1}, {2, 1, 3}};
   while(scanf("%d", &n) != EOF)
   {
       if(n <= 3)
       {
          printf("%d\n", mark[n-1][0]);
          for(int i = 1; i <= mark[n-1][0]; i ++)
          {
              if(i == 1)  printf("%d", mark[n-1][1]);
              else printf(" %d", mark[n-1][i]);        
          }     
          printf("\n");
          continue;
       }           
       int num = 0;   
       memset(mymap, 0, sizeof(mymap));
       for(int i = 2; i <= n; i += 2)
       {   
           mymap[num++] = i;     
       } 
       mymap[num++] = 1, mymap[num++] = 3;
       for(int i = 5; i <= n; i += 2)
       {
           mymap[num++] = i;        
       }
       printf("%d\n%d", num, mymap[0]);
       for(int i = 1; i < num; i++)
       {
           printf(" %d", mymap[i]);        
       }
       printf("\n");
   }    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值