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^51≤n≤2×105,∣ai∣≤106|a_i|\le 10^6∣ai∣≤106,∣bi∣≤1012|b_i|\le 10^{12}∣bi∣≤1012,∣ci∣≤1018|c_i|\le 10^{18}∣ci∣≤1018。
思路
随机几组即可直接快速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;
}

浙公网安备 33010602011771号