AOJの問題について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dfaddffafdadfa

AOJの問題について

#1

投稿記事 by dfaddffafdadfa » 10年前

http://judge.u-aizu.ac.jp/onlinejudge/d ... sp?id=0299
この問題で、どうしても正解が出せません。
http://web-ext.u-aizu.ac.jp/pc-concours ... 14_pre.pdf
の解説と、方針は間違っていないはずなのですが。どこが違うか教えていただけると嬉しいです。
int get(int a,int b,int n,bool f){
if(f){
if(a>b)return b+n-a;
else return b-a;
}
else{
if(a>b)return a-b;
else return a+n-b;
}
}
int main(){
int n,m,p,t[120000],ans=pow(2,30);
int a1=0,a2=0;
cin>>n>>m>>p;
for(int i=0;i<m;i++)cin>>t;
sort(t,t+m);
for(int i=0;i<m;i++){
a1=max(a1,get(p,t,n,1));
}
for(int i=0;i<m;i++){
a2=max(a2,get(p,t,n,0));
}
ans=min(a2,a1);
if(ans==0)ans=20*n;
for(int i=0;i<m-1;i++){//右回りにtまで行って,左回りにt[i+1]まで行く
ans=min(ans,get(p,t,n,1)*2+get(p,t[i+1],n,0));
}
for(int i=m-1;i>0;i--){//左回りにtまで行って、右回りにt[i-1]まで。
ans=min(ans,get(p,t,n,0)*2+get(p,t[i-1],n,1));
}
if(m==1)cout<<min(get(p,t[0],n,1),get(p,t[0],n,1))*100<<endl;
else cout<<ans*100<<endl;
return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: AOJの問題について

#2

投稿記事 by みけCAT » 10年前

コードはBBcodeを有効にした状態でcodeタグで囲み、かつ適切にインデントをしていただけると、見やすくて助かります。

まだどこが違っているのかはわかりませんが、先頭に

コード:

#include <iostream>
#include <cmath>
#include <algorithm>
using std::cin;
using std::cout;
using std::endl;
using std::sort;
using std::max;
using std::min;
を書いて実行すると、

コード:

10 1 5
4
という入力を入れた時、答えは100となるはずなのに、900が出力されました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: AOJの問題について

#3

投稿記事 by みけCAT » 10年前

dfaddffafdadfa さんが書きました: for(int i=0;i<m-1;i++){//右回りにtまで行って,左回りにt[i+1]まで行く
ans=min(ans,get(p,t,n,1)*2+get(p,t[i+1],n,0));
}
for(int i=m-1;i>0;i--){//左回りにtまで行って、右回りにt[i-1]まで。
ans=min(ans,get(p,t,n,0)*2+get(p,t[i-1],n,1));
}

右回りにt[m-1]まで行って、左回りにt[0]まで行くケースが考慮されていません。
また、左回りにt[0]まで行って、右回りにt[m-1]まで行くケースが考慮されていません。
例えば

コード:

10 2 5
4
6
という入力を入れた時、答えは300となるはずなのに、900と出力されました。
dfaddffafdadfa さんが書きました: if(m==1)cout<<min(get(p,t[0],n,1),get(p,t[0],n,1))*100<<endl;
この部分での2回のgetの呼び出しについて、引数がどちらも同じになっています。
どちらか一方の第四引数は0になるべきだと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る