首页 > 其他分享 >P2831 [NOIP2016 提高组] 愤怒的小鸟

P2831 [NOIP2016 提高组] 愤怒的小鸟

时间:2024-04-03 11:56:42浏览次数:25  
标签:NOIP2016 cout int P2831 小鸟 include define

思路

状压+优化

代码

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <cmath>
#include <string.h>
#define R(x) x = read()
#define For(i, j, n) for (int i = j; i <= n; ++i)
using namespace std;

const int N = 20, M = 1 << 18;
const double eps = 1e-8;

void equation(double &x, double &y, double a1, double b1, double c1, double a2, double b2, double c2)
{ // 解方程
    y = (a1 * c2 - a2 * c1) / (a1 * b2 - a2 * b1);
    x = (c1 - b1 * y) / a1;
}

bool Equal(double a, double b)
{
    if (fabs(a - b) < eps)
        return true;
    return false;
}

bool check(double x, double y, double a, double b)
{
    return Equal(y, a * x * x + b * x);
}

// equation(a,b,x[i]*x[i],x[i],y[i],x[j]*x[j],x[j],y[j]);

int t, n, m;
int Connection[N][N], f[M], first_zero[M];
double x[N], y[N];

int lowbit(int x)
{
    return x & (-x);
}

void print(int x)
{
    for (int i = 7; i >= 0; i--)
        cout << ((x >> i) & 1);
    cout << endl;
}

void get_zero()
{
    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < 18; j++)
        {
            if (!((i >> j) & 1))
            {
                first_zero[i] = j;
                break;
            }
        }
    }
}

void init()
{
    double a, b;
    memset(Connection, 0, sizeof(Connection));
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
        {
            if (i == j)
            {
                Connection[i][i] = 1 << (i - 1);
                continue;
            }
            if (Equal(x[i], x[j]))
                continue;
            equation(a, b, x[i] * x[i], x[i], y[i], x[j] * x[j], x[j], y[j]);
            if (a > -eps)
                continue;
            for (int k = 1; k <= n; k++)
                if (check(x[k], y[k], a, b))
                    Connection[i][j] |= 1 << (k - 1);
        }
}

int dp()
{
    memset(f, 0x3f, sizeof(f));
    f[0] = 0;
    for (int st = 0; st < 1 << n; st++)
    {
        int p = first_zero[st];
        for (int i = 1; i <= n; i++)
        {
            int t = st | Connection[p + 1][i];
            f[t] = min(f[t], f[st] + 1);
        }
    }
    return f[(1 << n) - 1];
}

int main()
{
    get_zero();
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d%d", &n, &m);
        For(i, 1, n)
            scanf("%lf%lf", &x[i], &y[i]);
        init();
        printf("%d\n", dp());
    }
    return 0;
}

 

标签:NOIP2016,cout,int,P2831,小鸟,include,define
From: https://www.cnblogs.com/smartljy/p/18112384

相关文章

  • 洛谷之P1563 [NOIP2016 提高组] 玩具谜题
    题目 [NOIP2016提高组]玩具谜题题目背景NOIP2016提高组D1T1 题目描述小南有一套可爱的玩具小人,它们各有不同的职业。有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时singer告诉小南一个谜......
  • 洛谷题单指南-线性表-P2058 [NOIP2016 普及组] 海港
    原题链接:https://www.luogu.com.cn/problem/P2058题意解读:计算24小时时间窗口内不同国家的数量,是队列的典型应用。解题思路:本题需要用到两个关键的数据结构:队列、数组队列用来保存24小时内到达的船的时间,数组用来保存24小时内每个国家有多少人每到一只船,需要把时间放入队列,如......
  • C++游戏飞翔的小鸟软件二次开发
    引言:在快节奏的现代生活中,人们总是在寻找一种方式来放松自己,释放内心的压力。游戏作为一种娱乐方式,早已深入人心。今天,我要向大家介绍的是一款简单而又充满挑战的小游戏——飞翔的小鸟。这款游戏的核心玩法是控制一只小鸟在无尽的天空中飞翔,通过点击屏幕使小鸟上升,避开各种障碍......
  • P1563 [NOIP2016 提高组] 玩具谜题
    1.题目介绍2.题解2.1模拟思路有一个大坑,题目给你的小人顺序是按逆时针给的,不是顺时针!!!跟顺时针相比掉一下顺序就行。看似一共有四种情况:[0,0],[0,1],[1,0],[1,1],其实可以简化分为两种情况,因为[0,0]和[1,1]都代表你要顺时针数,[1,0],[0,1]都代表你要逆时针数代码#include<b......
  • Luogu P1563 [NOIP2016 提高组] 玩具谜题
    [NOIP2016提高组]玩具谜题\(link\)题目背景NOIP2016提高组D1T1题目描述小南有一套可爱的玩具小人,它们各有不同的职业。有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图:这时singer告诉小南一个谜题:“......
  • 洛谷题单指南-模拟和高精度-P1563 [NOIP2016 提高组] 玩具谜题
    原题链接:https://www.luogu.com.cn/problem/P1563题意解读:本题关键在于根据小人的朝向和寻找的方向来确定数组下标的变化。用数组存储小人,intd[]存朝向,inta[]存名称,朝向和寻找方向有4种组合:朝向(0:向内,1:向外)  寻找方向(0:左,1:右)  数组下标操作00顺时针寻找,下标递减......
  • 小鸟游戏
    importpygameimportsysimportrandomimportnumpyasnpclassBird(object):"""定义一个鸟类"""def__init__(self):"""定义初始化方法"""self.birdRect=pygame.Rect(65,50,50,50)#鸟的矩形#定义鸟的......
  • 小鸟游戏
    importpygameimportsysimportrandomclassBird(object):"""定义一个鸟类"""def__init__(self):"""定义初始化方法"""self.birdRect=pygame.Rect(65,50,50,50)self.birdStatus......
  • 【洛谷 P1909】[NOIP2016 普及组] 买铅笔 题解(打擂台法)
    [NOIP2016普及组]买铅笔题目背景NOIP2016普及组T1题目描述P老师需要去商店买支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起见,P老师决定只买同一种包装的铅笔。商店不允许将铅笔的包装......
  • Ynoi2012 NOIP2016 人生巅峰
    Day\(\text{XXX}\)。注意到修改是易于复合的立方操作,而且值域非常小,所以可以直接\(O(v\logm)\)预处理出对每个\(i\in[0,v)\)操作了\(2^{j}\lem\)次的结果,维护出每一位被修改了多少次,查询某一位的值直接倍增\(O(\logm)\)即可。然后这个限制很弱,因为如果区间内有重复......