数学(一)

void solve()

{

mt19937 rng;

int sum=0;

for (int i = 0; i<100000; ++i) {

int x, y, r;

x = rng() % 199 - 99;

y = rng() % 199 - 99;

do

{

r= rng() % 199 - 99;

}while(x+r>100||x-r<-100||y+r>100||y-r<-100);

sum+=abs(x)+abs(y);

}

cout<<sum;

}

第二个是

void solve()

{

mt19937 rng;

int sum=0;

for (int i = 0; i<100000; ++i) {

int x, y, r;

do{

x = rng() % 199 - 99;

y = rng() % 199 - 99;

r= rng() % 199 - 99;

}while(x+r>100||x-r<-100||y+r>100||y-r<-100);

sum+=abs(x)+abs(y);

}

cout<<sum;

}

通过观察sum可得第个方法普遍大于90*n;

这是jiangly的方法和代码

include:<bits/stdc++.h>

using i64 = long long;

int main() {

std::ios::sync_with_stdio(false);

std::cin.tie(nullptr);

int n;

std::cin>>n;

int sum = 0;

for (int i = 0; i < n; i++) {

int x, y, r;

std::cin>>x>>y>>r;

sum += std::abs(x) + std::abs(y);

}

if (sum>90 * n) {

std::cout<<"bit-noob\n";

} else {

std::cout<<"buaa-noob\n";

}

return 0;

}

不过还有一种就是观察两个人的方法,概率分析,第一种方法是圆心概率一定 第二种是半径概率一定。因此第一个人的圆心位置概率更平均。也就是说,第一种方法取到偏远地方(max(abs(x),abs(y))大于95)的概率更大。平均取数的话,第一种取到大于95的概率大概有1/20,在1e5的数字范围内大约有5000次能取到,我试了一下,5000确实是对的,不过保险起见,这个阈值还是不要取临界.

#include<bits/stdc++.h>

define:endl '\n'

using namespace std;

typedef long long LL;

typedef pair<int,int>PII;

const int N = 1e6+10, M = 30010;

void solve()

{

// cout<<setiosflags(ios::fixed)<<setprecision(10);

int n;

cin>>n;

int cnt = 0;

for(int i = 0; i<n ;i++)

{

int x, y, r;

cin>>x>>y>>r;

if(max(abs(x),abs(y)) >= 95) cnt++;

}

if(cnt >= 3000) cout<<"bit-noob"<<endl;

else cout<<"buaa-noob"<<endl;

}

int main()

{

ios::sync_with_stdio(0);

cin.tie(0);

int T = 1;

while (T--)

{

solve();

}

return 0;

}

(本章完)

相关推荐