USACO/spin 3.2.3

   简单题,不过我犯了个错误 
Your program exited with exit status `2'. 返回值要为0 .USACO
#include <stdio.h>
#include <stdlib.h>
#include<string.h>

void  deal(int visit[][370],int speed[],int t,int i)
{
    int ars[370]={0};
    int angle;
    int j;
    angle=speed[i]*t;
    memcpy(ars,visit[i],sizeof(ars));
    for(j=0;j<360;j++)
    {
      visit[i][(j+angle)%360]=ars[j];                    //转角度后重新赋值
    }
}

int main()
{
   FILE *fin=fopen("spin.in","r");
   FILE *fout=fopen("spin.out","w");
   int speed[10]={0};
   int wedge[10]={0};
   int wstart[10][10]={0},dis[10][10]={0};
   int i,j,p,t;
   int check=0;
   int visit[10][370]={0},visit1[10][370]={0};                                                         //记录是否能通过
   for(i=0;i<5;i++)
   {
       fscanf(fin,"%d %d",&speed[i],&wedge[i]);
       for(j=0;j<wedge[i];j++)
       {
           fscanf(fin,"%d %d",&wstart[i][j],&dis[i][j]);
           for(p=wstart[i][j];p<=wstart[i][j]+dis[i][j];p++)
              {
               visit[i][p%360]=1;
              }

        }
    }

   for(t=0;t<360;t++)                                   //速度为整数故最多360S了
   {
       memcpy(visit1,visit,sizeof(visit));  //每次修理后值都会改变,所以要重新赋值下
       for(i=0;i<5;i++)
       {
           deal(visit1,speed,t,i);                 //每个时间都处理下数组
       }
       for(j=0;j<360;j++)
       {
          for(p=0;p<5;p++)
            {
               if(!visit1[p][j]) break;
               if(p==4&&visit1[p][j])        //表示有五个是有缺口的
                {
                  check=1;
                  fprintf(fout,"%d\n",t);
                  return 0;
                }
            }
        }
   }
   if(!check)
   {
        fprintf(fout,"none\n");
   }
  return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值