题目来源:CodeForce #15 A

现在有 n 间正方形的房子,其中心点分布在 X轴 上,现在我需要新建一间边长为 t 的房子,要求新房子至少和一间房子相邻,但是不能和其他房子重合。请输出我有多少个位置可以选。

先分析一下:

  因为现在要建一间边长为 t 的房子,而且要有一间房子与之相邻。所以,只有两种可能:第一种,在两端头。第二种,两间房子之间的间隔>= t。

分析完之后,做法已经是显而易见的了。首先,最少能建2间房子(在两端头)。然后就是遍历所有中心点,来计算房子间的距离,来判断能不能建房子。特别的,如果距离=t,只有一种方法。如果>t那么有两种。

时间效率:O( n * logn),主要用在排序上。

附AC代码:

   1: #include <stdio.h>

   2: #include <iostream>

   3: #include <math.h>

   4: #include <stdlib.h>

   5: #include <string.h>

   6: #include <algorithm>

   7: #include <string>

   8: #include <vector>

   9: using namespace std;

  10:  

  11: int t, n, pri[29], res[29], tmp[29], sum = 0;

  12:     

  13: void dfs(int id)

  14: {

  15:     if (id > n)

  16:     {

  17:         int m = 0;

  18:         for (int i = 1; i <= n; i++)

  19:             if (tmp[i])

  20:                 m += pri[i];

  21:         if (m > sum && m <= t)

  22:         {

  23:             sum = m;

  24:             for (int i = 1; i <= n; i++)

  25:                 res[i] = tmp[i];

  26:         }

  27:         return;

  28:     }

  29:     else

  30:     {

  31:         tmp[id] = 1;

  32:         dp(id+1);

  33:         tmp[id] = 0;

  34:         dp(id+1);

  35:         return;

  36:     }

  37: }

  38:  

  39: int main()

  40: {

  41:     while (~scanf("%d%d", &t, &n))

  42:     {

  43:         memset(res, 0, sizeof(res));

  44:         memset(tmp, 0, sizeof(tmp));

  45:         memset(pri, 0, sizeof(pri));

  46:         sum = 0;

  47:         for (int i = 1; i <= n; i++)

  48:             scanf("%d", &pri[i]);

  49:         dfs(1);

  50:         for (int i = 1; i <= n; i++)

  51:             if (res[i])

  52:                 printf("%d ", pri[i]);

  53:         printf("sum:%d\n", sum);

  54:     }

  55: }

大家一起做训练 第二场 E Cottage Village的更多相关文章

  1. 大家一起做训练 第一场 B Tournament

    题目来源:CodeForce #27 B 有n个人比赛,两两之间都有一场比赛,一共 n * (n - 1) / 2 场比赛.每场比赛的记录方式是 a b,表示在a和b的比赛中,a胜出,b失败. 经过研 ...

  2. 大家一起做训练 第一场 E Number With The Given Amount Of Divisors

    题目来源:CodeForce #27 E 题目意思和题目标题一样,给一个n,求约数的个数恰好为n个的最小的数.保证答案在1018内. Orz,这题训练的时候没写出来. 这道题目分析一下,1018的不大 ...

  3. 大家一起做训练 第一场 G CD

    题目来源:UVA 624 题目的意思就是:我现在需要从 t 张CD中拿出一部分来,尽可能的凑出接近 N 这么久的音乐,但是不能超过 N. CD不超过20张,每张长度不超过 N ,不能重复选. 一个很简 ...

  4. 大家一起做训练 第一场 A Next Test

    题目来源:CodeForce #27 A 题目的意思简而言之就是要你输出一个没有出现过的最小的正整数. 题意如此简单明了,做法也很明了. 直接读入所有的数,然后排个序,设置个变量从1开始,出现过+1, ...

  5. CSU 多校训练第二场 J Pinemi Puzzles

    传送门:http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2279 题意: 代码: #include <set> #incl ...

  6. 2016summer 训练第二场

    1.http://acm.hdu.edu.cn/showproblem.php?pid=5112 #define _CRT_SECURE_NO_DEPRECATE #include<iostre ...

  7. 2015多校训练第二场 hdu5305

    把这题想复杂了,一直在考虑怎么快速的判断将选的边和已选的边无冲突,后来经人提醒发现这根本没必要,反正数据也不大开两个数组爆搜就OK了,搜索之前要先排除两种没必要搜的情况,这很容易想到,爆搜的时候注意几 ...

  8. 18牛客多校训练第二场 J farm

    题意:一个n×m的农田, 每个小格子都有一种作物, 现在喷t次农药,每次农药覆盖一个矩形, 该矩形里面与农药类型不同的植物都会死掉, 求最后植物的死亡数是多少. 题解:二维树状数组. 每次喷农药的时候 ...

  9. 2019HDU多校训练第二场 Longest Subarray

    题意:给你一个串,问满足以下条件的子串中最长的是多长:对于每个数字,要么在这个子串没出现过,要么出现次数超过k次. 思路:对于这类问题,常常转化为数据结构的询问问题.我们考虑枚举右端点,对于当前右端点 ...

随机推荐

  1. C#中的约束类型

  2. Short Encoding of Words

    2018-07-02 09:48:48 问题描述: 问题求解: 方法一.问题给了规模n = 2000,也就是说用BF在O(n^2)的时间复杂度可以过,因此,第一个方法就是BF,但是需要注意的是这里已经 ...

  3. Python获取脚本所在目录的正确方法(转)

    1.以前的方法如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数.如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者 ...

  4. codeforces 568a//Primes or Palindromes?// Codeforces Round #315 (Div. 1)

    题意:求使pi(n)*q<=rub(n)*p成立的最大的n. 先收集所有的质数和回文数.质数好搜集.回文数奇回文就0-9的数字,然后在头尾添加一个数.在x前后加a,就是x*10+a+a*pow( ...

  5. android--------动画之进度条

    Android开发中在处理耗时工作的时候,例如:列表加载,大多数会有一个精度条加载的框,里面有一个像gif的图片在旋转一样. 效果图:   <!--     根标签为animation-list ...

  6. Elections CodeForces - 1020C (贪心)

    大意: 有n个选民, m个党派, 第i个选民初始投$p_i$一票, 可以花费$c_i$改变投票, 求最少花费使得第一个党派的票数严格最大 假设最终第一个党派得票数$x$, 枚举$x$, 则对于所有票数 ...

  7. Tips for Sync Vimtex and PDF

    vimtex synctex: \lv. skim synctex: to display the TeX source line corresponding to a point in the PD ...

  8. Python并行(parallel)之谈

    简介 可以先看看并发Concurrent与并行Parallel的区别 在谈并行前,头脑中总会浮出多线程.多进程.线程/进程同步.线程/进程通信等词语. 那为什么需要同步.通信,它们之间的作用是怎样的呢 ...

  9. python 爬虫之为什么使用opener对象以及为什么要创建全局默认的opener对象

    基本的urlopen()函数不支持验证.cookie或其他HTTP高级功能.要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象. install_opener( ...

  10. quartz---springmvc的配置文件正合

    quartz---springmvc的配置文件正合 XML <beans xmlns="http://www.springframework.org/schema/beans" ...