結果

問題 No.158 奇妙なお使い
ユーザー aaaaaa
提出日時 2018-11-11 02:55:43
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 3,626 bytes
コンパイル時間 765 ms
コンパイル使用メモリ 96,236 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2024-11-27 08:56:02
合計ジャッジ時間 2,395 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 2 ms
5,248 KB
testcase_04 WA -
testcase_05 AC 2 ms
5,248 KB
testcase_06 AC 1 ms
5,248 KB
testcase_07 AC 2 ms
5,248 KB
testcase_08 AC 2 ms
5,248 KB
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 AC 1 ms
5,248 KB
testcase_16 AC 2 ms
5,248 KB
testcase_17 AC 4 ms
5,248 KB
testcase_18 AC 10 ms
5,248 KB
testcase_19 AC 2 ms
5,248 KB
testcase_20 AC 2 ms
5,248 KB
testcase_21 AC 173 ms
5,248 KB
testcase_22 AC 204 ms
5,248 KB
testcase_23 AC 2 ms
5,248 KB
testcase_24 AC 1 ms
5,248 KB
testcase_25 WA -
testcase_26 AC 2 ms
5,248 KB
testcase_27 WA -
testcase_28 WA -
testcase_29 AC 1 ms
5,248 KB
testcase_30 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <functional>
#include <map>
#include <iomanip>
#include <math.h> 
#include <stack>
#include <queue>
#include <bitset>
#include <cstdlib>
#include <tuple>
#include <cctype>
#include <ctype.h>
#include <set>
#include <sstream>

using namespace std;
//int db, dc;
int a1000, a100, a, b1000, b100, b, c1000, c100, c;

int funcb(int db, int bb1000, int bb100, int bb, int flag, int flag2) {
	int cnt = 0;
	int n1000 = db / 1000;
	int n100 = (db - (n1000 * 1000)) / 100;
	int n = db - (n1000 * 1000 + n100 * 100);

	while (true)
	{
		if (bb1000 >= n1000) {
			bb1000 -= n1000;
		}
		else if( (n1000 - bb1000) * 1000 <= bb100 * 100){
			bb100 -= ((n1000 - bb1000) * 1000) / 100;
			bb1000 = 0;
		}
		else if ( n1000 * 1000 <= bb1000 * 1000 + bb100 * 100 + bb) {
			bb -= (n1000 * 1000) - (bb1000 * 1000 + bb100 * 100);
			bb1000 = 0;
			bb100 = 0;
		}
		else {
			break;
		}


		if (bb100 >= n100) {
			bb100 -= n100;
		}
		else if ((n100 - bb100) * 100 <= bb) {
			bb -= ((n100 - bb100) * 100);
			bb100 = 0;
		}
		else {
			break;
		}

		if (bb >= n) {
			bb -= n;
		}
		else {
			break;
		}

		if (flag2 == true) {
			bb1000 += b1000;
			bb100 += b100;
			bb += b;
		}
		else {
			bb1000 += c1000;
			bb100 += c100;
			bb += c;
		}

		if (flag == 1)return bb1000;
		if (flag == 2)return bb100;
		if (flag == 3)return bb;

		cnt++;
	}



	return cnt;
}


int main(){
	int i, j;
	//int a1000, a100, a, b1000, b100, b, c1000, c100, c;
	int db, dc;
	int dpb[100000][3];
	int dpc[100000][3];

	cin >> a1000 >> a100 >> a >> db >> b1000 >> b100 >> b >> dc >> c1000 >> c100 >> c;

	dpb[0][0] = a1000;
	dpb[0][1] = a100;
	dpb[0][2] = a;

	dpc[0][0] = a1000;
	dpc[0][1] = a100;
	dpc[0][2] = a;

	int cnt2 = 0;

	for (i = 0; i < 100000; i++) {

		int fbcn = funcb(db, dpb[i][0], dpb[i][1], dpb[i][2], 0, true);
		int fccn = funcb(dc, dpc[i][0], dpc[i][1], dpc[i][2], 0, false);

		if (fbcn == 0 && fccn == 0) {
			break;
		}
		else if (fbcn >= fccn ) {
			dpb[i + 1][0] = funcb(db, dpb[i][0], dpb[i][1], dpb[i][2], 1, true);
			dpb[i + 1][1] = funcb(db, dpb[i][0], dpb[i][1], dpb[i][2], 2, true);
			dpb[i + 1][2] = funcb(db, dpb[i][0], dpb[i][1], dpb[i][2], 3, true);
		}
		else if (fbcn < fccn) {
			dpb[i + 1][0] = funcb(dc, dpc[i][0], dpc[i][1], dpc[i][2], 1, false);
			dpb[i + 1][1] = funcb(dc, dpc[i][0], dpc[i][1], dpc[i][2], 2, false);
			dpb[i + 1][2] = funcb(dc, dpc[i][0], dpc[i][1], dpc[i][2], 3, false);
		}


		if (fbcn >= fccn) {
			dpc[i + 1][0] = funcb(db, dpb[i][0], dpb[i][1], dpb[i][2], 1, true);
			dpc[i + 1][1] = funcb(db, dpb[i][0], dpb[i][1], dpb[i][2], 2, true);
			dpc[i + 1][2] = funcb(db, dpb[i][0], dpb[i][1], dpb[i][2], 3, true);
		}
		else if (fbcn < fccn) {
			dpc[i + 1][0] = funcb(dc, dpc[i][0], dpc[i][1], dpc[i][2], 1, false);
			dpc[i + 1][1] = funcb(dc, dpc[i][0], dpc[i][1], dpc[i][2], 2, false);
			dpc[i + 1][2] = funcb(dc, dpc[i][0], dpc[i][1], dpc[i][2], 3, false);
		}

		cnt2++;

	}



	cout << cnt2 << endl;








	//int n, d;
	//cin >> n >> d;
	//int dp[110][2];//i日目にjで働く(0:Tokyo,1:Kyoto)
	//			   //初期値の設定
	//dp[0][0] = 0; dp[0][1] = 0;
	//int t, k;
	//cin >> t >> k;
	//dp[1][0] = t; dp[1][1] = k - d;
	//for (int i = 1; i < n; i++) {
	//	//漸化式の計算
	//	int t, k;
	//	cin >> t >> k;
	//	dp[i + 1][0] = max(dp[i][0], dp[i][1] - d) + t;
	//	dp[i + 1][1] = max(dp[i][0] - d, dp[i][1]) + k;

	//	cout << "t->" << dp[i + 1][0] << " k->" << dp[i + 1][1] << endl;

	//}
	//cout << max(dp[n][0], dp[n][1]) << endl;





	getchar();
	getchar();
	return 0;
}
0