B3800 [NICA #1] 弹幕题解

B3800 [NICA #1] 弹幕

题目背景

题目描述

某款弹幕游戏的 BOSS 会放出弹幕攻击玩家(自机)。由于这些弹幕的行动轨迹十分诡异,因此现在希望找到一个「安定点」(只要呆在这个位置就不会被任何弹幕打到的地方)

假定空中有 nnn 道弹幕。我们用三元组 (ai,bi,ci)(a_i,b_i,c_i)(ai,bi,ci) 描述每一个弹幕的参数。我们认为自机在一条标着 0,1,2,⋯ ,1060,1,2,\cdots,10^60,1,2,,106 的数轴上,且只能处于整点处。

假定自机位于坐标为 xxx 的位置。那么自机会被第 iii 枚弹幕打到,当且仅当 x3+aix2+bix+ci=0x^3+a_ix^2+b_ix+c_i=0x3+aix2+bix+ci=0

现在你需要求出任意一个 xxx,使得自机不会被任何一个弹幕打中。你需要保证求出来的 xxx[0,106][0,10^6][0,106] 之内。

输入格式

第一行有一个正整数 nnn,表示弹幕的数量。

接下来 nnn 行,每行有三个整数 ai,bi,cia_i,b_i,c_iai,bi,ci,描述一条弹幕的参数。

输出格式

输出共一行一个整数 xxx,表示任意一个不会被弹幕打中的地方。

输入输出样例 #1

输入 #1

3
0 0 0
-3 3 -1
-6 11 -6

输出 #1

4

说明/提示

样例解释

  • 第一枚弹幕只会打到位于 000 位置的自机;
  • 第二枚弹幕只会打到位于 111 位置的自机;
  • 第三枚弹幕只会打到位于 1,2,31,2,31,2,3 位置的自机。

因此如果在 444 位置,自机就不会被打中。事实上,只要不是 0,1,2,30,1,2,30,1,2,3 位置均可,答案不唯一。

数据范围及约定

对于全部数据,保证 1≤n≤2×1051\le n\le 2\times 10^51n2×105∣ai∣≤106|a_i|\le 10^6ai106∣bi∣≤1012|b_i|\le 10^{12}bi1012∣ci∣≤1018|c_i|\le 10^{18}ci1018

思路

随机几组即可直接快速AC。

代码见下

#include<bits/stdc++.h>
using namespace std;
long long n,a[200005],b[200005],c[200005],u,g;
int main(){
    srand(time(0));
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i]>>b[i]>>c[i];
    }
    while(1){
        u=rand()%1000001;
        g=0;
        for(int i=1;i<=n;i++){
            if(u*u*u+a[i]*u*u+b[i]*u+c[i]==0){
                g=1;
                break;
            }
        }
        if(g==0){
            cout<<u<<endl;
            return 0;
        }
    }
	return 0;
}
posted @ 2025-11-13 21:12  bz02_2023f2  阅读(10)  评论(0)    收藏  举报  来源