スクリーンショット_2019-04-04_23

文系ギャルが0から始める競技プログラミング#19

Intro


この記事は不定期連載です。
↓最初の一本はこちら↓
文系ギャルが0から始める競技プログラミング#0

↓直前の記事はこちら↓
文系ギャルが0から始める競技プログラミング#18

・ABC102B


がしがし問題解いていきます!

問題文
長さN
整数列Aが与えられます。
Aの(添字の)異なる2要素の差の絶対値最大値を求めてください。

制約
2≤N≤100
1≤Ai≤10^9
入力はすべて整数である。

入力
入力は以下の形式で標準入力から与えられる。
N
A1A2...AN

出力
Aの(添字の)異なる2要素の差の絶対値の最大値を出力せよ。

― B - Maximum Difference

異なる2要素の差の絶対値の最大値?????
何言ってるんだ???
と、思いましたが、
差の最大値ということは、一番大きいのから一番小さいの引けばそれでいいはずです。
一番小さいのは1以上なのだから、特に何も気にせず。

並び替えて、一番うしろから一番前まで引きます!!!!

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
   int N;
   cin >> N;
   long long A[100];
for(int i=0;i<N;i++){
       cin >> A[i];
   }
sort(A,A+N);
cout << A[N-1]-A[0] << endl;
return 0;
}

サクッと☆優勝!
天才〜〜!

・ABC113B

問題文
ある国で、宮殿を作ることになりました。
この国では、標高がxメートルの地点での平均気温T−x×0.006度です。
宮殿を建設する地点の候補はN個あり、地点iの標高はHiメートルです。
joisinoお姫様は、これらの中から平均気温がA度に最も近い地点を選んで宮殿を建設するようにあなたに命じました。
宮殿を建設すべき地点の番号出力してください。
ただし、解は一意に定まることが保証されます。

制約
1≤N≤1000
0≤T≤50
−60≤A≤T
0≤Hi≤10^5
入力は全て整数解は一意に定まる

入力
入力は以下の形式で標準入力から与えられる。
N
T A
H1H2...HN

出力
宮殿を建設すべき地点の番号を出力せよ。

― B - Palace

ゴール整理します。


T-x*0.006度で示される平均気温が、一番A度に近い地点を探し番号で答えます。
小数点が出てくるので、doubleで標高を持ってきます。

   int N,T,A;
   cin >> N >> T >> A;
double H[1000] = {};
for(int i=0;i<N;i++){
       cin >> H[i];
   }


温度さえあれば標高はもう必要ないので、A度からの差書き換えます
絶対値で取る必要があるのでぐぐったら、fabsという便利なモノがありそうです。
#include <cmath>と頭に付け足して使います!!

   for(int i=0;i<N;i++){
       H[i] = fabs(A-(T-H[i]*0.006));
   }

次は何番目か、がゴールなので、
添字をうまく使って一番小さいもの調べます


   int ans = 0;
   for(int i=0;i<N;i++){
       if(H[ans]>H[i]){
           ans = i;
       }
   }


0からスタートしているので、1を足して優勝です!!!


   cout << ans+1 << endl;
   return 0;
}
#include <iostream>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
int main()
{
   int N,T,A;
   cin >> N >> T >> A;
   
   
   double H[1000] = {};
   
   for(int i=0;i<N;i++){
       cin >> H[i];
   }
   
   for(int i=0;i<N;i++){
       H[i] = fabs(A-(T-H[i]*0.006));
       
   }
   int ans = 0;
   for(int i=0;i<N;i++){
       if(H[ans]>H[i]){
           ans = i;
       }
   }
   cout << ans+1 << endl;
   return 0;
}

わあい!できた!!!!優勝!!!!
分かりづらい問題文には書いて整理するのが一番効きますね
本番だとやってる時間がないので、なるべく練習して慣れていきたいと思います〜〜〜〜〜!天才!

引き続き類題を解いていきます
別解スマートな答え便利なテクニックなど、よかったらTwitterコメントで教えてください!

Outro


#20に続く!(不定期連載です。)

これは成功と挫折を繰り返し、
タピオカ片手に難問を解く、
ギャルプログラマが生まれるまでの物語である…。

この記事が気に入ったらサポートをしてみませんか?