[topcoder]SRM 633 DIV 2

第一题,http://community.topcoder.com/stat?c=problem_statement&pm=13462&rd=16076

模拟就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <vector>
#include <algorithm>
 
using namespace std;
 
class Target {
public:
  vector <string> draw(int n) {
    vector<string> result(n, string(n, ' '));
    int x = 0;
    int y = 0;
    while (n >= 1) {
      for (int i = 0; i < n; i++) {
        result[x + i][y] = '#';
        result[x][y + i] = '#';
        result[x + n - 1][y + i] = '#';
        result[x + i][y + n - 1] = '#';
      }
      x += 2;
      y += 2;
      n -= 4;
    }
    return result;
  }
};

第二题,想了很久。最后发现用三角形的A+B>=C,一个一个推,可以推出N条边所组成的多边形(开口)的距离范围。http://apps.topcoder.com/wiki/display/tc/SRM+633#Jumping

有详细的图示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <vector>
#include <algorithm>
#include <string>
#include <algorithm>
using namespace std;
 
class Jumping {
public:
  string ableToGet(int x, int y, vector <int> jumpLengths) {
    double d = sqrt(1.0 * x * x + 1.0 * y * y);
    sort(jumpLengths.begin(), jumpLengths.end());
    double low = jumpLengths[0];
    double high = jumpLengths[0];
    for (int i = 1; i < jumpLengths.size(); i++) {
      low = max(0.0, jumpLengths[i] - high);
      high = high + jumpLengths[i];
    }
    if (d >= low && d <= high) {
      return "Able";
    } else {
      return "not able";
    }
 
  }
 
};

第三题,没做。后来看题解,就是用LCD和GCD的限制,得到x*y,然后穷举搜索。用DFS。

posted @   阿牧遥  阅读(193)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
阅读排行:
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 为什么UNIX使用init进程启动其他进程?
点击右上角即可分享
微信分享提示