caohaha's stuff

2017-08-20 11:12:29

writer:pprp
CCPC预选赛水平太菜了,去不了了

这个是一个找规律的题目,题意一开始也很难理解

题意描述:

给你一个数,比如说1,在一个坐标系中你需要用多少个线段(横着竖着对角线都可以)才能围出1单位的面积

很容易发现,当尽可能多的是对角线才能满足面积最大

规律如图:加一个边,两个边,三个边,四个边

这几种情况

代码如下:(大佬的)

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int T, S;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d", &S);

        int L = sqrt(S/2);
        int area = 2*L*L;          

        if(S - area == 0)  //如果恰好等于
        {
            printf("%d\n", L * 4);
        }
        else if(S - area <= L - 1)
        {
            printf("%d\n", L * 4 + 1);
        }
        else if(S - area <= 2 * L)
        {
            printf("%d\n", L * 4 + 2);
        }
        else if(S <= 2 * (L + 1) * (L + 1) - (L + 2))
        {
            printf("%d\n", L * 4 + 3);
        }
        else
        {
            printf("%d\n", (L + 1)*4);
        }
    }

    return 0;
}

orz ...

caohaha's stuff

时间: 2024-08-23 06:50:55

caohaha's stuff的相关文章

HDU 6154 CaoHaha&#39;s staff 思维 找规律

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6154 题目描述: 围成一个面积不小于S的多边形, 最少需要多少根儿线段, 线段可以为单元格边或者对角线 解题思路: 最大的面积肯定是由根号2为边长的正方形围成了, 那么我们把所有正方形都遍历一遍, 找出S介于N, N+1的那个上界N+1设为max, 因为MAX所围成的多边形面积和MAX-1, MAX-2, MAX-3围成的多边形面积, 找出满足条件的最小的一个即可 代码: #include <io

【推导】【找规律】【二分】hdu6154 CaoHaha&#39;s staff

题意:网格图.给你一个格点多边形的面积,问你最少用多少条边(可以是单位线段或单位对角线),围出这么大的图形. 如果我们得到了用n条边围出的图形的最大面积f(n),那么二分一下就是答案. n为偶数时,显然要尽量用斜边去拼矩形,于是f(i)=i*i/4-1 (i mod 4 == 2),f(i)=i*i/4-1(i mod 4 == 0). 当n为奇数时,尽量用i-1情况下的最长边向外扩张一个单位,于是f(i)=f(i-1)+[(i+1)/4]*2-1(i mod 2 == 1),方括号表示下取整.

2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6154 CaoHaha&#39;s staff 思维

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154 题意:在笛卡尔坐标系下,画一个面积至少为  n 的简单多边形,每次只能画一条边或者一个格子的对角线,问至少要画几条. 解法:如果一个斜着的矩形长宽分别是 a,b,那么它的面积是 2ab.最优解肯定是离 sqrt(n/2)很近的位置.想想 n=5 时答案为什么是7 然后在那个小范围内枚举一下就好了.我给一张做题时画的图 #include <bits/stdc++.h> using namesp

[HDOJ6154] CaoHaha&#39;s staff(规律, 打表, 二分)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154 有些题一辈子只会做一次,比如这个题.. 题意:炒鸡难懂,学弟读明白的.懒得描述,反正这题以后不会再做. f(i)表示i个线段能围成的最大面积,画画图就会发现一个规律. 然后查询的时候二分最小的大于等于s的即可. 1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛

hdu 6154 CaoHaha&#39;s staff 二分

题意: 一笔可以画一条长为1的边或者一条根号二的对角线 问围成一个面积是x的图形最少需要几条边 思路: 用公式直接二分 1 #include<bits/stdc++.h> 2 #define cl(a,b) memset(a,b,sizeof(a)) 3 #define debug(a) cerr<<#a<<"=="<<a<<endl 4 using namespace std; 5 typedef long long ll;

CaoHaha&#39;s staff

CaoHaha's staff Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description "You shall not pass!"After shouted out that,the Force Staff appered in Cao

2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6154 CaoHaha&#39;s staff(几何找规律)

Problem Description "You shall not pass!"After shouted out that,the Force Staff appered in CaoHaha's hand.As we all know,the Force Staff is a staff with infinity power.If you can use it skillful,it may help you to do whatever you want.But now,hi

hdu6154 找规律

hdu6154   CaoHaha's staff 题意:问在方格上最少用多少笔可以画出面积不小于S的图,笔画只能横竖斜. tags:笔画肯定尽量斜的最优.规律是:如果当前画出了一个矩形,那接下来的两笔肯定是在较长边上加.所以打出表即可. #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) f

CCPC for UESTC

1001. Vertex Cover 题意:有一个贪心算法求最小顶点覆盖是每次选出度数最大的点然后删去,输出一个图使得这个算法跑出来的答案是你给出的答案的三倍及以上. 题解: 构造一个二分图,设左边有 nn 个点,标号是 1 ~ n1 n.对于每个 i \in [1, n]i∈[1,n],都在右边新建 \lfloor \frac{n}{i} \rfloor??i??n??? 个点,每个点都选择左边的 ii个点连 1 条边,使得左边每个点最多只被多加了一条边.这样构造完成后可以发现贪心的做法会把右