[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2004年予選>9問目

9問目(1次方程式・データ探索)

問題

略。原文参照。

入力データはカレントディレクトリの009.csvに保存されているものとします。

入力


l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,v1,v2 (1件目のデータ:全て整数)
l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,v1,v2 (2件目のデータ:全て整数)
...
...

出力


列車がすれ違う区間の番号(1件目のデータに対する出力)
列車がすれ違う区間の番号(2件目のデータに対する出力)
...
...

入力例


1,1,1,1,1,1,1,1,1,1,40,60
1,1,1,1,1,3,3,3,3,3,50,50
10,10,10,10,10,10,10,10,10,10,50,49

出力例


4
7
6

解き方例

まず、1次方程式で、全体の長さのどこですれ違うかを求めます。その値を元にどこまで進んだ時にすれ違うのかを調べます。

ソースコード

お持ち帰り

C/C++

#include <stdio.h>

int main(){
    //in[10]とin[11]は列車の速さ
    int in[12];

    FILE *fp;

    fp = fopen("009.csv","r");

    while(EOF != fscanf(fp,"%d",&(in[0]))){
        int i;
        double sum,x;

        for(i=1;i<12;i++)fscanf(fp,",%d",&(in[i]));

        sum=0;
        for(i=0;i<10;i++)sum+=in[i];

        //全体の区間内のどこですれ違うかを計算。
        x = sum  * in[10] / (in[10]+in[11]);

        //i=0;
        //for(sum=in[i];sum<x;sum+=in[i])i++;
        //上の省略形
        for(sum=in[i=0];sum<x;sum+=in[++i]);

        printf("%d\n",i+1);
    }
    fclose(fp);
    return 0;
}

その他

ちょっとめんどくさい問題ですが、難しくはないはずです。ボンミスしないように解きましょう。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-8-23
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2004年予選>9問目