結果
| 問題 |
No.180 美しいWhitespace (2)
|
| ユーザー |
158b
|
| 提出日時 | 2015-05-24 14:42:37 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,276 bytes |
| コンパイル時間 | 509 ms |
| コンパイル使用メモリ | 66,244 KB |
| 実行使用メモリ | 10,020 KB |
| 最終ジャッジ日時 | 2024-07-06 06:41:47 |
| 合計ジャッジ時間 | 9,105 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 4 |
| other | AC * 6 WA * 1 TLE * 1 -- * 23 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:112:21: warning: ‘maxno’ is used uninitialized [-Wuninitialized]
112 | while(maxno != targetmax && minno != targetmin){
| ~~~~~~^~~~~~~~~~~~
main.cpp:112:43: warning: ‘minno’ is used uninitialized [-Wuninitialized]
112 | while(maxno != targetmax && minno != targetmin){
| ~~~~~~^~~~~~~~~~~~
ソースコード
#include <iostream>
#include <algorithm>
#include <functional>
#include <string>
#include <limits.h>
#include <vector>
#include <numeric>
using namespace std;
int n_kari;
long b_kari[1000];
long a_kari[1000];
//デフォルト昇順
void combsort(){
bool flg;
int h;
h = n_kari / 1.3;
while(true){
flg = true;
for(int i=0; i+h<n_kari; i++){
if(b_kari[i] > b_kari[i+h]){ //ソート基準変更位置
//swap
swap(a_kari[i], a_kari[i+h]);
swap(b_kari[i], b_kari[i+h]);
flg = false;
}
}
if(h == 1){
if(flg){
break;
}
}else{
h /= 1.3;
}
}
}
int main(){
int n;
//y=ax+b
long b[1000]; //スペース
long a[1000]; //タブ
long y[1000]; //相対位置
long x;
long ansx,ansy;
int maxno,minno;
int targetmax = 0; //該当の最初の位置
int targetmin = 0; //該当の最初の位置
long temp;
long a_min = LONG_MAX;
long a_max = -1;
cin >> n_kari;
for(int i=0; i<n_kari; i++){
cin >> b_kari[i] >> a_kari[i];
}
//ソート
combsort();
//本データ作成
n = 0;
for(int i=0; i<n_kari-1; i++){
if(a_kari[i] < a_min){
a_min = a_kari[i];
a[n] = a_kari[i];
b[n] = b_kari[i];
//cout << n << ":" << a[n] << "\t" << b[n] << endl;
n ++;
}
}
//cout << "---" << endl;
for(int i=n_kari-1; i>=1; i--){
if(a_kari[i] > a_max){
a_max = a_kari[i];
a[n] = a_kari[i];
b[n] = b_kari[i];
//cout << n << ":" << a[n] << "\t" << b[n] << endl;
n ++;
}
}
//targetmax,targetmin計算
for(int i=0; i<n; i++){
if(a[i] > a[targetmax] || a[i] == a[targetmax] && b[i] > b[targetmax]){
targetmax = i;
}
if(a[i] < a[targetmin] || a[i] == a[targetmin] && b[i] < b[targetmax]){
targetmin = i;
}
}
//相対位置計算
for(int i=0; i<n; i++){
y[i] = b[i] - b[targetmax];
}
//醜さ計算
ansy = LONG_MAX;
x = 0;
while(maxno != targetmax && minno != targetmin){
//タブ幅を進める
x ++;
//相対位置計算
for(int i=0; i<n; i++){
y[i] += a[i] - a[targetmax];
}
//醜さ計算
maxno = max_element(y, y + n) - y;
minno = min_element(y, y + n) - y;
temp = *(maxno + y) - *(minno + y);
//ans更新
if(temp < ansy){
ansy = temp;
ansx = x;
}
}
cout << ansx << endl;
return 0;
}
158b