読者です 読者をやめる 読者になる 読者になる

beet's soil

競プロのことなど

Chokudai Contest 002

なんかやっていたので出てみた。面白かった。
38334点で31位でした。わーい。

【最初】
素数いっぱいかければいいやろ(適当

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    bool isPrime(ll x){
      for(ll i=2;i*i<=x;i++) if(x%i==0) return false;
      return true;
    }
    int main(){
      ll i,j=2,k;
      for(i=0;i<100;i++){
        while(!isPrime(j)) j++;
        k=1;
        while(k*j<1e9) k*=j;
        cout << k << endl;
        j++;
      }
      return 0;
    }

421 点。明らかに方針が違うことを悟る。

【次】
素数をたくさん掛け合わせよう。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    bool isPrime(ll x){
      for(ll i=2;i*i<=x;i++) if(x%i==0) return false;
      return true;
    }
    int main(){
      ll i,j=2,k=1,x=10,y;
      vector<ll> v;
      for(i=2;i<10000;i++) if(isPrime(i)) v.push_back(i);
      //random_shuffle(v.begin(),v.end());
      for(i=0;i<100;i++){
        k=v[i+x];j=0;
        bool u[x]={},f;
        while(1){
          u[j]=false;
          if(k*v[j]<100000000LL)k*=v[j],u[j]=true;
          j=(j+1)%x;f=false;
          for(y=0;y<x;y++) f|=u[y];
          if(!f) break;
        }
        cout << k << endl;
      }
      return 0;
    }

16112 点。まだまだ取れそう。

【次】
1e8と1e9勘違いしてるやんけ(絶望

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    bool isPrime(ll x){
      for(ll i=2;i*i<=x;i++) if(x%i==0) return false;
      return true;
    }
    int main(){
      ll i,j=2,k=1,x=5,y;
      vector<ll> v;
      for(i=2;i<10000;i++) if(isPrime(i)) v.push_back(i);
      //random_shuffle(v.begin(),v.end());
      cout << 1000000000LL << endl;
      for(i=0;i<100-1;i++){
        k=v[i+x];j=0;
        bool u[x]={},f;
        while(1){
          u[j]=false;
          if(k*v[j]<1000000000LL)k*=v[j],u[j]=true;
          if(j<2&&k*v[j]<1000000000LL)k*=v[j],u[j]=true;
          j=(j+1)%x;f=false;
          for(y=0;y<x;y++) f|=u[y];
          if(!f) break;
        }
        cout << k << endl;
      }
      return 0;
    }


【最後】
色々試したけど成果が出ないので離脱

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    bool isPrime(ll x){
      for(ll i=2;i*i<=x;i++) if(x%i==0) return false;
      return true;
    }
    int main(){
      ll i,j,k,x=6,y;
      vector<ll> v;
      for(i=2;i<10000;i++) if(isPrime(i)) v.push_back(i);
      //random_shuffle(v.begin(),v.end());
      for(i=0;i<100;i++){
        k=v[i];j=0;
        bool u[x]={},f;
        if(i&&k*v[0]<1000000000LL)k*=v[0];
        if(i-1&&k*v[0]<1000000000LL)k*=v[0];
        if(i&&k*v[1]<1000000000LL)k*=v[1];
        j=0;
        while(1){
          u[j]=false;
          if(k*v[j]<1000000000LL)k*=v[j],u[j]=true;
          j=(j+1)%x;f=false;
          for(y=0;y<x;y++) f|=u[y];
          if(!f) break;
        }
        cout << k << endl;
      }
      return 0;
    }

【全体】
スコアがだんだん上がって言って面白かった。
こういうタイプのコンテストは珍しいのでもっとやってほしい。
Top10位が全員Text(cat)って、、、