feat(P8901): 优化农夫游戏逻辑并改进性能

- 移除不必要的数组a,改用变量存储最小值
- 添加对偶数的特殊处理,直接计算t[i]值
- 修改游戏结果判断逻辑,基于模4运算决定获胜者
- 清理调试代码和注释
This commit is contained in:
Zengtudor 2025-09-21 17:01:24 +08:00
parent 82d3e19015
commit dc8c323910

View File

@ -1,27 +1,38 @@
#include <algorithm>
#include <bitset>
#include <cstdint>
#include <cstdio>
#include <iostream>
#include <istream>
#include <print>
#include <vector>
using ll = int64_t;
const ll maxa=5e6+5;
std::vector<ll> a, t;
std::vector<ll> t;
std::bitset<maxa> isp;
static inline void solve(){
ll n;
std::cin>>n;
a.clear();
a.resize(n+1);
// a.clear();
// a.resize(n+1);
ll minn = 1e9+7;
ll a=-1;
for(ll i=1;i<=n;i++){
ll tmp;
std::cin>>tmp;
a[i]=t[tmp];
if(t[tmp]<minn){
minn=t[tmp];
a=tmp;
}
}
if(!(a%4)){
std::cout<<"Farmer Nhoj\n";
}else{
std::cout<<"Farmer John\n";
}
}
int main(){
@ -38,6 +49,10 @@ int main(){
// for(ll i=1;i<=100;i++)if(isp[i])std::cout<<i<<"\n";
t.resize(maxa);
for(ll i=1;i<t.size();i++){
if((i&1)==0){
t[i]=i/4;
continue;
}
ll nt=0,ni=i;
while(ni>=4){
if(isp[ni]){
@ -47,8 +62,9 @@ int main(){
nt++;
ni-=4;
}
// printf("t[%lld]=%lld\n",i,t[i]);
}
for(ll i=1;i<=100;i++)printf("t[%lld]=%lld\n",i,t[i]);
// for(ll i=1;i<=100;i++)printf("t[%lld]=%lld\n",i,t[i]);
ll T;
std::cin>>T;
while(T--){