2013ACM多校联合(1)_CSUST 题解

第一题:http://www.acmore.net/problem.php?id=1461

    这题的题意是:  给你一个长度为n的数字序列,这n个数字序列可以向右移动K次(0<=K<=n-1),通过移动,会得到n个不同的序列,那么 这n个不同的序列里有多少个序列

满足 前i个数的和 大于等于0(1<=i<=n).    n的范围是 1<=n<=10^6

   很容易想到一种暴力的方法。求出以i为第一项 往后扫描 扫n个数。  i后不足n个数的右从1开始计数。  检查这个序列是否满足题意。  这样暴力的时间复杂度是o(N^2).而n的范围

是1<=n<=10^6  所以这种暴力明显不行。

  换一种思想。我们从序列的后面往前面扫描。如果遇到一个数a[i]是负数。说明以a[i]为开头的序列一定是不满足题意的。 同理  我们往前继续累加。累加到a[j], 如果这个累加的和依然是负数,说明以a[j]为开头的序列也一定不满足题意。。  这样的算法的时间复杂度将会缩减到o(N);


第二题:http://www.acmore.net/problem.php?id=1462

   模拟+贪心。    猫每次有三种 选择。  1 直接走1步。2  带能量跳跃的最短步数,3.休息。

   code:http://codepad.org/hm0vS6q7


 


第三题:http://www.acmore.net/problem.php?id=1463

       动态规划类的。 状态转移方程写不来。 借鉴别人的思想才AC的 。

   定义dp[i][j]   //表示 前i个兔纸的栈里还剩下j个兔子没有被消除。   那么放入第i个兔子会有两种影响。  一种是消除3个兔子。 另一种是增加一个兔子。

   那么状态转移方程:      dp[i][j]=  dp[i-1][j+1]+dp[i-1][j-2];   

  dp[i][2]时有些特殊。 因为对于站内的兔子颜色没有限制  ,其他状态有限制。    dp[i][2]=dp[i-1][j+1]+2*dp[i-1][0];

 


第四题:http://www.acmore.net/problem.php?id=1464

          简单数据结构。关键是思考两个问题:1,如何存储100,000 *100,000 这么大的数据(肯定是不能用二维数组保存的),2.如何进行行列间的变换。

         问题1:可以用 map<pair<int,int>,int >  这样记录所在行列的坐标还有权值。

         问题2:开两个数组,f1,和f2 。f1[i]  表示当前第i行通过变换后,实际所在的行号。f2[i]  表示当前第i列通过变换后,实际所在的列号。

       

第五题:


第六题:http://www.acmore.net/problem.php?id=1466

        晚上写的时候,还是WA了两次才AC```T^T.第一次是出去最前面的空格,和最后面的空格时的break;第二次是当m(纸的数量)比空格的数量大的时候,空格被减完了,没有跳出循环。

        正解思路是,先让一张纸盖满整个格子,再贪心的减去最大的单位空格量,直到最后纸被分的数量=m(单位空格量充足),或者减完所有单位空格这时又纸的数量<=m.

         注意:

        1.  单位空格量(连续的空格为一个单位)的统计,排序后,贪心的先减去单位空格大的(即连续空格数目多的)。

         2.  在减去单位空格时,若没有单位空格了,要跳出循环。


第七题:http://www.acmore.net/problem.php?id=1467

       开始想到先求出分子总乘积的%MOD=(1e9+7),再除以分母,然后果断WA←_←.(%运算只有+,—,*)

      正解思路是先将分子除去分母i,此时变成了1到(i-1),(i+1)到n的乘积取模。

      我是有了两个数组dp1[],dp2[]分别存储1到n和n到1的乘积模,dp[0]=dp[n+1]=1;

      即 dp1[1]=A1%MOD;               dp2[n]=An%MOD;

            dp1[2]=(A1*A2)%MOD;      dp1[n-1]=(An*An-1)%MOD;

             `````                                               `````

      那么所求的答案 Bi=(dp1[i-1]*dp2[i+1])%MOD;

 


第八题:http://acmore.net/problem.php?id=1469

          原题 HDU1010

          BFS(胡大的): http://codepad.org/kgvInXup

  还是没搞懂胡大的vis[10][10][10][10][50]数组是干嘛的。

 

          DFS: http://codepad.org/MqCPjuP5 

          原以为数据很小,直接暴力DFS即可。结果WA到蛋疼。。可能数据量很大。。

          xiao賤说加一个奇偶剪枝就可以了。

          回去,搞了搞,在HDU上交还是TLE。 最后, 直到我把我能想到的剪枝全加上才AC!!!



你可能感兴趣的:(2013ACM多校联合(1)_CSUST 题解)