集训第一天

正式集训第一天就是这么带劲。。。先是做杭电上的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 }
posted @ 2012-07-16 18:41  Naix_x  阅读(184)  评论(0编辑  收藏  举报