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