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

川のブログ

川の適当気ままなブログです。 

AOJ 0082 Flying Jenny

こんにちは川です。

今回は配列に馬車や車、馬の順番をぶち込んで、それをずらしていって残りが少なかった場合を表示させてます。

今回はなぜかソースコードのコード長を減らしたい衝動に駆られていた。

しかし、そこまで減らなかったし、載せれるレベルにはならなかった。

 

ソースコード

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int f[]={4,1,4,1,2,1,2,1},p[8],r,P;
    while(cin>>p[0]){
        for(int i=1;i<8;i++)cin>>p[i];
        for(int i=0;i<8;i++){
            int n=0;
            for(int j=0;j<8;j++)if(f[(i+j)%8]<p[j])n+=p[j]-f[(i+j)%8];
            if(r>n||i==0){
                r=n;
                P=i;
            }
            else if(r==n){
                for(int j=0;j<8&&f[(i+j)%8]<=f[(P+j)%8];j++){
                    if(f[(i+j)%8]<f[(P+j)%8]){
                        P=i;
                        break;
                        }
                    }
                }
        }
        for(int i=0;i<7;i++)cout<<f[(P+i)%8]<<" ";
            cout<<f[(P+7)%8]<<endl;
    }
}