多校联合第二场(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 }

你可能感兴趣的:(T)