今度は女子大生とペアプロとな(ハッカソンVol.2)
第1回で正月休みを浪費させてくれたオンラインハッカソンの第2回開催とのメールが。
女子大生とペアプロするだけの簡単なお仕事です!|paizaオンラインハッカソンVol.2
開催から2日目で既に計測最短時間が出ているので、もうこれは自分との闘いでしかないw
ということでまずはスタート地点を思いっきり下げてみた。(20140417一部修正)
#include<stdio.h>
#include<stdlib.h>
int height,width;
int s,t;
int a2idx(int j,int k,int wi)
{
int gg;
gg=(k+wi/t)*width + j + (wi % t);
return ( gg );
}
main()
{
int i,j,k;
int wi,gl,count,flag;
char linestr[400];
int grid[100000];
int w_n;
scanf("%d %d",&height,&width);
for( i = 0 ; i < height ; i++ ){
scanf("%s\n",linestr);
for( j = 0 ; j < width ; j++){
grid[ i* width + j ] = linestr[j]-'0';
}
}
scanf("%d\n",&w_n );
for( i = 0 ; i < w_n ; i++ ){
scanf("%d %d\n",&s,&t);
count=0;
for( j = 0 ; j < width - t +1; j++ ){
for( k = 0 ; k < height - s + 1; k++ ){
flag = 0;
for( wi= 0 ; wi < s*t ; wi++ ){
if( grid[a2idx(j,k,wi)]) {
flag = 1;
break;
}
else continue;
}
if(flag) ;
else{
count++;
}
}
}
printf("%d\n",count);
}
return 0;
}
我ながら目が痛くなるコードになってもたw
けど「ウィジェット置けるかどうか端から順番に試す」という直感的なアルゴリズムをそのまま書くと、まあこうなるわな。
まあ、置けない条件を見つけたらループをスキップするぐらいの直感的に当たり前のことはやってるし、2次元配列を使うとさらにネストが深くなるのでその回避したぐらいはしてる。
メインに4重ループがある時点でちょっとデータが増えたら破綻するのは明らかなんだけど、とりあえずテストはOKだったので提出してみた。
・・・テストケース4でランタイムエラータイムオーバーになったが平均から下回る程度。
(修正追記:タイムオーバーではなくて、ランタイムエラーでした。配列数を間違ってたという・・)
あ、これでも求人あるのか。
もっと下の点ならどのように罵ってもらえるのか試したい気もしてきてなあw
まずは、判定条件のスキップをやめてみようかな・・(ぉぃ
追記:判定スキップやめても結果変わらず
テストケース通して、かつ、これより遅くするって逆に難しくないか・・・
追記2:
なんだ、動作試験しなくても提出できるんだw コンパイルエラーでめでたくE判定もらいました。コンパイル通してエラー出してもE判定でしたがご褒美が変わりましたw
単にランダムなだけかもしれんけど。