kotonoha_pcg@気ままに雑記

kotonoha_pcgが気分次第で様々書き置きます.dlang関係他:http://kotonoha-pcg.hatenadiary.com

ARC#032と他

昨日21:00~22:30まで行われたARCは駄目でした。というより、A問から解法が思いつかなかったです。

 A問題は、要は「与えられた入力の階乗した数が素数か判別し、それぞれに合った文字列を出力する」ということなのですが、forループで素数判定を行おうとして(てかネットから探してきたやつを弄って)boolとか使ってたんだけど、結局入力が1のときだけAC貰えるようなやつしか作れませんでした。で、結果としてはAC数:0問でした。

一応、下のソースがACコード(コンテスト終了後の解説を見て(写して?)提出)

#include<iostream>
using namespace std;
  
int main(void){
    int n;
    cin >> n;
    if(n==2){
        cout << "WANWAN" << endl;
    }else{
        cout << "BOWWOW" << endl;
    }
    return 0;
}

 ソースコード見るとものすごく簡潔で、題意は上に要約した通りなんですが、これが総和の公式を用いて判定を行うため、解説スライドから、

S=1+2+...+N=N(N+1)/2が総和の公式

式からNが小さいことが自明で無いときは素数にならない(だろう)

  • N=1は1なので素数ではない
  • N=2のときは素数
  • N>2の時は常に合成数

特に、上記3つ目の予想(?)から、N=2の時だけ素数、それ以外は非素数であるため、それに従い出力するといえる。

 ということはつまり、ifで分岐させる条件はn==2のみで良いので、ソースの通りでAcが貰えることになる。  …ということのようでした。解いてた時はこんな短いソースで終わるなんて想像すらしてませんでした...

 

さて、昨日と一昨日のAOJの駄ソースを投下

AOJ #10007

与えられた二数x,yを小さい方からソートする 最初 do~whilか科と思ったけど試しにwhile()でやったら通ったのでそのまんまに

#include<iostream>
using namespace std;
int main(){
    int x,y,tm;
    x=0;
    y=0;
    while(1){
        cin >> x >> y;
        if(x==0 && y==0)
            break;
        if(x>y){
            tm=x;
            x=y;
            y=tm;
        }
        cout << x << " " << y << endl;
    }
    return 0;
}

AOJ #10002

ITP1セットに収録の二数a,bから長方形の面積と形の長さを求める

#include<iostream>
using namespace std;
 
int main(void){
    int a,b,sum,men;
 
    cin >> a >> b;
    men=a*b;
    sum=a+a+b+b;
    cout << men << " " << sum << endl;
    return 0;
}

AOJ #0094

与えられるa,bから平方面積を求め、それを坪面積に換算する.最初constを使おうとしたけどなんか上手くいかなかったので関数内で定義することにした.

#include<iostream>
#include<cstdio>
 
int main(){
    int a,b,m;
    scanf("%d %d",&a,&b);
    double S;
    m=a*b;
    S=m/3.305785;
    printf("%lf\n",S);
}

今日もなんらかの問題は1問は解きます(断言)。てか1時間に3~5問くらいのペースで解きたいんだけど頭が付いてきてくれないのが問題かと考えてたりします。