多校联合第二场(TJU)

     真的是好久没写总结了,每天都在忙着刷题,看题,看新的东西,暑假时间多了,更要提高效率。说一下今天的比赛,其实也没啥好说的,或许对于我们来说题目难度有点大,每次我们都是跟题,这样的选择也是无奈啊。。。每次做多校都是被虐。。。在受虐中成长吧,今天的比赛第一个题,不知是数据水,还是就是贪心。。。在怀疑中31分钟1Y了。。。剩下继续找可做的题。。找了半天,发现各种神似图论的题。。第二个神似几何题,然后我觉得好像见过,然后想到做过1维答案是中位数,然后就以为是和中位数,然后悲剧了14次提交,中间各种恶搞啊。。在1-3个小时的时候,现在想想就是一种折磨啊,看着外校的队伍都在过题,实在是痛苦啊,帮着scf搞那个最短路,然后想了想自己那个可以DP搞,然后自己换了种方式,写的时间3点到4点吧,终于调试出来一次过了。这个题,按贪心做的,也没找到反例,所以才有后来的悲剧。以后一定要冷静分析,说不定就YY出来了,坚持,不能放弃。。没做出来的几个题,有机会补上吧。

HDU 4310 Hero (官方题解是状态压缩DP....)

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 struct node
 5 {
 6     int dp;
 7     int hp;
 8     double v;
 9 }p[2001];
10 int cmp(const void *a,const void *b)
11 {
12     return (*(struct node*)a).v <  (*(struct node*)b).v?1:-1;
13 }
14 int main()
15 {
16     int i,n,sum,k;
17     while(scanf("%d",&n)!=EOF)
18     {
19         sum = 0;k = 0;
20         memset(p,0,sizeof(p));
21         for(i = 0;i <= n-1;i ++)
22         {
23             scanf("%d%d",&p[i].dp,&p[i].hp);
24             p[i].v = p[i].dp*1.0/p[i].hp;
25             sum += p[i].dp;
26         }
27         qsort(p,n,sizeof(p[0]),cmp);
28         for(i = 0;i <= n-1;i ++)
29         {
30             k += sum*p[i].hp;
31             sum -= p[i].dp;
32         }
33         printf("%d\n",k);
34     }
35     return 0;
36 }

HDU 4311 Meeting point-1(DP)官方题解和我做法差不多,听说有用树状数组做的,犀利。。。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #define N 1000000000
 5 struct node
 6 {
 7     __int64 x;
 8     __int64 y;
 9     int z;
10 } p[100001];
11 int cmp1(const void *a,const void *b)
12 {
13     return (*(struct node*)a).x >  (*(struct node*)b).x?1:-1;
14 }
15 int cmp2(const void *a,const void *b)
16 {
17     return (*(struct node*)a).y >  (*(struct node*)b).y?1:-1;
18 }
19 __int64 n,ox[100001],oy[100001],sum[100001];
20 int main()
21 {
22     __int64 i,k;
23     __int64 min;
24     int t;
25     scanf("%d",&t);
26     while(t--)
27     {
28         scanf("%I64d",&n);
29         k = 0;
30         memset(p,0,sizeof(p));
31         memset(ox,0,sizeof(ox));
32         memset(oy,0,sizeof(oy));
33         memset(sum,0,sizeof(sum));
34         for(i = 0; i <= n-1; i ++)
35         {
36             scanf("%I64d%I64d",&p[i].x,&p[i].y);
37             p[i].z = i;
38         }
39         qsort(p,n,sizeof(p[0]),cmp1);
40         ox[0] = p[0].x;
41         for(i = 1;i <=n-1;i ++)
42         {
43             ox[i] += p[i].x+ox[i-1];
44         }
45        /* for(i = 0;i <= n-1;i ++)
46         {
47             printf("%I64d %I64d\n",p[i].x,p[i].y);
48         }*/
49         sum[p[0].z] = (ox[n-1] - p[0].x*n);
50         for(i = 1;i <= n-1;i ++)
51         {
52             sum[p[i].z] = ox[n-1]-ox[i-1]-(n-i)*p[i].x+i*p[i].x-ox[i-1];//这里写的最纠结啊。
53         }
54         /*for(i = 0;i <= n-1;i ++)
55         {
56             printf("%I64d ",ox[i]);
57         }
58         printf("\n");
59         */
60         qsort(p,n,sizeof(p[0]),cmp2);
61         oy[0] = p[0].y;
62         for(i = 1;i <=n-1;i ++)
63         {
64             oy[i] += p[i].y+oy[i-1];
65         }
66         sum[p[0].z] += (oy[n-1] - p[0].y*n);
67         for(i = 1;i <= n-1;i ++)
68         {
69             sum[p[i].z] += oy[n-1]-oy[i-1]-(n-i)*p[i].y+i*p[i].y-oy[i-1];
70         }
71         min = sum[0];
72         for(i = 1;i <= n-1;i ++)
73         {
74             if(min > sum[i])
75             min = sum[i];
76         }
77         printf("%I64d\n",min);
78     }
79     return 0;
80 }
posted @ 2012-07-26 18:46  Naix_x  阅读(280)  评论(0编辑  收藏  举报