zoukankan      html  css  js  c++  java
  • 九度 1334

      http://ac.jobdu.com/problem.php?id=1334

    没仔细读题,id>=0,开始为了图省事,把0当成无效的标志了,另外还有一处,q-num+1,本来没算错的,但是去括号时忘了变号,写成了q-num-1,导致十个数据只能过三个,改过来直接全过,看了下榜,居然还是第一个~~

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int n, m, k;
    int id, num;
    int flag[102];
    char command[10];
    
    bool
    check (int *start, int length)
    {
      int *q = start + length - 1;
      while (start <= q)
        {
          if ((*start) != -1)
    	{
    	  return false;
    	}
          start++;
        }
      return true;
    }
    
    void
    mark (int *start, int id, int length)
    {
      int *q = start + length - 1;
      while (start <= q)
        {
          *start = id;
          start++;
        }
    }
    
    int
    main ()
    {
      while (scanf ("%d%d", &n, &m) != EOF)
        {
          int *mat = (int *) malloc (sizeof (int) * n * n);
          int i;
          int *p = mat;
          for(i=0;i<102;i++)
    	flag[i]=-1;
          for (i = 1; i <= n * n; i++)
    	{
    	  *p = -1;
    	  p++;
    	}
          scanf ("%d", &k);
          for (i = 1; i <= k; i++)
    	{
    	  scanf ("%s",command);
    	  
    	  if (strcmp (command, "in") == 0)
    	    {
    	      scanf("%d%d",&id,&num);
    	      if (flag[id]!=-1)
    		{
    		  printf ("no\n");
    		  continue;
    		}
    	      bool fflag=false;
    	      int *p = mat;
    	      int *q = mat + n * n-1;
    	      if(num>n*n){
    		printf("no\n");
    		continue;
    		}	      
    	      while (p <= q - num+1)
    		{
    		  if (check (p, num))
    		    {
    		      printf ("yes\n");
    		      mark (p, id, num);
    		      flag[id]=id;
    		      fflag=true;
    		      break;
    		    }
    		  p++;
    		}
    	      if (!fflag)
    		printf ("no\n");
    	    }
    	  else if (strcmp (command, "out") == 0)
    	    {
    	      scanf("%d",&id);
    	      if (flag[id]==-1)
    		{
    //		  printf ("no\n");
    		  continue;
    		}
    	      flag[id] = -1;
    	      int *p = mat;
    	      int *q = mat + n * n-1;
    	      while (p <= q)
    		{
    		  if (*p == id)
    		    *p = -1;
    		  p++;
    		}
    //	      printf ("yes\n");
    	    }
    	}
          free (mat);
        }
      return 0;
    }
    
  • 相关阅读:
    P3015 [USACO11FEB]最好的括号Best Parenthesis
    P1944 最长括号匹配_NOI导刊2009提高(1)
    P2328 [SCOI2005]超级格雷码
    P2308 添加括号
    P5657 格雷码【民间数据】
    P2196 挖地雷
    P5020 货币系统
    括号序列模型--序列dp--U86873 小Y的精灵国机房之旅
    P1033 自由落体
    P1017 进制转换
  • 原文地址:https://www.cnblogs.com/yangce/p/2256480.html
Copyright © 2011-2022 走看看