关于这场CF的F

学术版

RedLycoris @ 2020-05-16 21:45:19

题目很有趣

大家有什么做法吗/kel


by gyh20 @ 2020-05-16 21:45:56

乱搞


by gyh20 @ 2020-05-16 21:46:12

然后答案乘二


by RedLycoris @ 2020-05-16 21:46:41

@天下我有 不是输出max(ans+7,ans*2)吗


by RedLycoris @ 2020-05-16 21:46:58

我的代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline void ask(ll x){
    cout<<"? "<<x<<'\n';
    fflush(stdout);
}
ll ans;
inline void T(ll x){
    ll ee=1000000000000000000;
    ll R=x,cnt=0;
    for(;R<=ee/x;R*=x);
    ask(R);
    ll F;cin>>F;
    for(;F!=1;F/=x,++cnt);
    ans*=(cnt+1);
}
bool isp[1005];
vector<int>pms;
vector<int>hv;
inline void solve(){hv.clear();ans=1;
    int j=0;ll ee=1000000000000000000;
    for(int i=1;i<=8;++i){
        ll cur=1;int lj=j;
        for(;cur<=ee/pms[j];cur*=pms[j],++j);
        ask(cur);ll tf;cin>>tf;
        for(int f=lj;f<j;++f)if(tf%pms[f]==0)hv.push_back(pms[f]);
    }
    for(int i=0;i<hv.size();++i){
        T(hv[i]);
    }
    cout<<"! "<<max(ans*2,ans+7)<<'\n';
    fflush(stdout);
}
int main(){
    for(int i=2;i<=1000;++i){
        if(!isp[i]){
            pms.push_back(i);
            for(int j=i*2;j<=1000;j+=i)isp[j]=1;
        }
    }
    int T;cin>>T;
    for(;T--;)solve(); 
}

by 山田リョウ @ 2020-05-16 21:48:05

%%%


by gyh20 @ 2020-05-16 21:48:18

@zrmpaul 差在7以内都行吧


by ix35 @ 2020-05-16 21:49:50

@zrmpaul

没有正确性保证的做法?


by RedLycoris @ 2020-05-16 21:52:17

@天下我有 4个大质数相乘时你会出问题吧


by gyh20 @ 2020-05-16 21:52:39

@zrmpaul 多大?


by gyh20 @ 2020-05-16 21:52:58

给个例子?


| 下一页