Markdown記述のテスト
問題文
[input.txt]には行数h、列数w、文字列S1,…,Shが書かれてます。
S1~Shは、#と (空白)から成るw文字の文字列です。
形式は以下の通りです。
[input.txt]
h w
S1
S2
…
Sh
ぬぬぬ君は[input.txt]を加工することで、0と1から成るテキストを作りたいです。
加工は以下の手順で行います。
①1行目(h wが書かれている行)を削除する
② (空白1文字)を0に、#を1に置き換える
③テキストを左90度回転する
④テキストを上下反転する
ぬぬぬ君はこの加工を手で行っていたのですが、疲れからか黒塗りの車に衝突してしまい、
手が使えなくなってしまいました。
そんなぬぬぬ君を見たあなたは、彼のテキスト加工を手伝うことにしました。
それでは、[input.txt]を加工し、加工後のテキストを[output.txt]に書き込む
プログラムを作成してください。ただし、リダイレクトを用いてはいけません。
すなわち実行形式は、
./a.out
または
~.exe
のようにします。
入力[input.txt]の制約
1 <= h, w <= 100
入出力例
例1
//input.txt 4 5 ## # # # ## # # ## //output.txt 1100 1011 0010 0101 1011
//手順1を終えたとき ## # # # ## # # ## //手順2を終えたとき 11001 10010 01101 01011 //手順3を終えたとき 1011 0101 0010 1011 1100 //手順4を終えたとき 1100 1011 0010 0101 1011
例2
//input.txt 3 26 # ### # # # # ### # # # # # # # # # ## # # # ### ### # # ### # # //output.txt 111 000 111 101 111 000 111 001 001 000 111 000 100 010 001 010 100 000 111 111 101 000 111 000 000 111
■
JOI2012予選4「Hot Days」
解けたので、備忘録のため、コードを適当に貼ります(ひどい)。
コードの貼り方が分からないので、この記事は何回か更新されます。
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int d, n;
int t[200];
int a[200], b[200], c[200];
int dp[201][200]; //dp[day][fuku] = sumの最大値
int ans = -1145141919;
void makeAns(){
int day, fuku, i;
//初期化
for( day = 0; day < d + 1; day++ ){
for( fuku = 0; fuku < n; fuku++ )
dp[day][fuku] = -114514;
}
for( fuku = 0; fuku < n; fuku++ ){
if( a[fuku] <= t[0] && t[0] <= b[fuku] )
dp[1][fuku] = 0; //0日目に服fukuを着た場合
}
//dp配列の更新
for( day = 1; day < d; day++ ){
for( fuku = 0; fuku < n; fuku++ ){
//day日目の服を決める(遷移)
for( i = 0; i < n; i++ ){
if( a[i] <= t[day] && t[day] <= b[i] ){
//day日目に服iを着る
dp[day + 1][i] = max(dp[day + 1][i], dp[day][fuku] + abs(c[fuku] - c[i]));
}
}
}
}
//答えを計算する
for( i = 0; i < n; i++ ){
ans = max(ans, dp[d][i]);
}
}
int main()
{
int i, j;
cin >> d >> n;
for( i = 0; i < d; i++ ) cin >> t[i];
for( i = 0; i < n; i++ ) cin >> a[i] >> b[i] >> c[i];
makeAns();
cout << ans << endl;
return 0;
}