集训第一天

正式集训第一天就是这么带劲。。。先是做杭电上的1个比赛,其实7个都算是自己做的。。。。这不由让我起了复制粘贴的歹心,有些模版还是再敲了一遍,然后就来到了一个以前见过N次,却不屑去做的一个题。。。

HDU 1106 排序  其实就 3个trick 一开始是5  连续的5 结尾没有5。。。。然后各种改。。。各种交,WA6次之后终于A了。

 1 #include <stdio.h>

 2 #include <string.h>

 3 #include <stdlib.h>

 4 __int64 p[100001];

 5 char str[1000001];

 6 int cmp(void const *a,void const *b)

 7 {

 8     return *(__int64 *)a>*(__int64 *)b ? 1:-1;

 9 }

10 int main()

11 {

12     __int64 i,j,k,start,len,a;

13     while(scanf("%s",str)!=EOF)

14     {

15         memset(p,0,sizeof(p));

16         j = 0;

17         for(i = 0; i <= len-1; i ++)

18         {

19             if(str[i] != '5')

20             {

21                 start = i;

22                 break;

23             }

24         }

25         len = strlen(str);

26         for(i = start; i <= len-1; i ++)

27         {

28             if(str[i] == '5'&&str[i-1] != '5')

29             {

30                 a = 1;

31                 for(k = i-1; k >= start; k --)

32                 {

33                     p[j] += a*(str[k]-'0');

34                     a = a*10;

35                 }

36                 start = i+1;

37                 j ++;

38             }

39             else if(str[i] == '5'&&str[i-1]  == '5')

40             {

41                 start = i+1;

42             }

43         }

44         if(str[len-1] != '5')

45         {

46             a = 1;

47             for(k = i-1; k >= start; k --)

48             {

49                 p[j] += a*(str[k]-'0');

50                 a = a*10;

51             }

52             start = i+1;

53             j ++;

54         }

55         qsort(p,j,sizeof(p[0]),cmp);

56         for(i = 0; i <= j-1; i ++)

57         {

58             if(i == 0)

59                 printf("%I64d",p[i]);

60             else

61                 printf(" %I64d",p[i]);

62         }

63         printf("\n");

64     }

65     return 0;

66 }

然后表示 目测 还有俩,一个线段树模版题,一个数论题,没啥想法。。。。

12点多校第一场,我们队 RP大爆发。。。说一下过程,由于隔得较远,QQ交流的多一点,而且人手一台电脑。我看中间4个题,发现E题看懂,DFS,开始了悲剧了1个多小时,然后看看排名,没几个过了,放弃了。。。。看到H,貌似可以做,但又没想法。这时我们过了3个了吧,然后看到了K题BFS,我说,我写把,找出以前打循环矩阵的模版,又搞了1+小时,过了样例,然后3个人讨论。。。这个题陷阱好多啊,然后发现要用很大的棋盘,终于胡改了几次,出现了RE,然后把队列改大一点,本来想会不会超时的,结果神奇的AC了。。。然后和他们讨论了会别的题,然后看看H,这个做出的人100+我感觉是DP,结果果真是。。。自己不怎么的 就想了个O(n^2)的做法,在4个多小时的才想出来。。。。不过还好,代码短,不用怎么调试,交上本以为会TLE,N有10的5次方,WA了,队友差个错,0的时候没考虑,改改,交错了个题。。。而且更搞笑的是最后那个题也过了,交上居然也A了。。。哎,就这样水过了这个,最后由把公式概率那个题,QC给试出来了。。感觉有点超长发挥了。。。人品爆发。。。

水过的H题 HDU 4252

#include <stdio.h>

#include <string.h>

#define N 100001

int p[N];

int main()

{

    int i,j,n,num = 0,min;

    while(scanf("%d",&n)!=EOF)

    {

        min = 0;

        num ++;

        for(i = 1; i <= n; i ++)

            scanf("%d",&p[i]);

        if(p[1] == 0)

        min ++;

        for(i = 2; i <= n; i ++)

        {

            if(p[i] == 0)

                  min++;

            else

            {

                for(j = i-1; j >= 1; j--)

                {

                    if(p[j] < p[i])

                        break;

                    else if(p[j] == p[i]&&p[i] != 0)

                    {

                        min++;

                        break;

                    }

                }

            }

        }

        printf("Case %d: ",num);

        printf("%d\n",n-min);

    }

    return 0;

}

搞的纠结6Y的K题。 HDU4255

  1 #include <stdio.h>

  2 #include <string.h>

  3 #include <math.h>

  4 #define N  288*288

  5 int o[90001],key[90001];

  6 int p[301][301];

  7 int r[90001],cc[90001];

  8 int main()

  9 {

 10     int a,b,c,d,e,i,f,j,k;

 11     int x,y,start,end,num,z,st,ai,endr,endc,t;

 12     int wx[4] = {0,0,-1,1};

 13     int wy[4] = {1,-1,0,0};

 14     a = 288;

 15     d = N;

 16     memset(o,0,sizeof(o));

 17     if(a%2==0)

 18         b=a/2;

 19     else

 20         b=(a+1)/2;

 21     for(c=1; c<=b; c++)

 22     {

 23         e=c;

 24         for(f=c; f<=a-c; f++)

 25             p[e][f]=d--;

 26         f=a-c+1;

 27         for(e=c; e<=a-c; e++)

 28             p[e][f]=d--;

 29         e=a-c+1;

 30         for(f=a-c+1; f>c; f--)

 31             p[e][f]=d--;

 32         f=c;

 33         for(e=a-c+1; e>c; e--)

 34             p[e][f]=d--;

 35     }

 36     if(a%2==1)

 37         p[a/2+1][a/2+1]=1;

 38     o[1] = 1;

 39     for(i = 2; i <= sqrt(N); i ++)

 40     {

 41         if(!o[i])

 42         {

 43             for(j = i+i; j <= N; j += i)

 44             {

 45                 o[j] = 1;

 46             }

 47         }

 48     }

 49     /* for(i = 1;i <= 100;i ++)

 50      {

 51          if(!o[i])

 52          printf("%d ",i);

 53      }*/

 54      a = 0;

 55     while(scanf("%d%d",&st,&ai)!=EOF)

 56     {

 57         a ++;

 58         memset(key,0,sizeof(key));

 59         for(i = 1; i <= 288; i ++)

 60             for(j = 1; j <= 288; j ++)

 61             {

 62                 if(p[i][j] == st)

 63                 {

 64                     x = i;

 65                     y = j;

 66                 }

 67                 else if(p[i][j] == ai)

 68                 {

 69                     endr = i;

 70                     endc = j;

 71                 }

 72             }

 73         start = end = 1;

 74         r[1] = x;

 75         cc[1] = y;

 76         z = 0;

 77         num = 0;

 78         key[st] = 1;

 79        /* printf("%d %d %d %d\n",x,y,endr,endc);*/

 80         while(start <= end)

 81         {

 82             if(key[ai])

 83             {

 84                 z = 1;

 85                 break;

 86             }

 87             j = 1;

 88             for(i = start; i <= end; i ++)

 89             {

 90                 for(k = 0; k <= 3; k ++)

 91                 {

 92                     if(r[i]+wx[k] >= 1&&r[i]+wx[k]<=288&&cc[i]+wy[k]>=1&&cc[i]+wy[k]<=288)

 93                     {

 94                         t = p[r[i]+wx[k]][cc[i]+wy[k]];

 95                         if(o[t]&&!key[t])

 96                         {

 97                             key[t] = 1;

 98                             r[end+j] = r[i]+wx[k];

 99                             cc[end+j] = cc[i]+wy[k];

100                             j ++;

101                         }

102                         else if(t == ai)

103                         {

104                             key[ai] = 1;

105                         }

106                     }

107                 }

108             }

109             start = end+1;

110             end = end +j-1;

111             num++;

112         }

113         printf("Case %d: ",a);

114         if(!z)

115             printf("impossible\n");

116         else

117         printf("%d\n",num);

118     }

119     return 0;

120 }

你可能感兴趣的:(集训第一天)