提出 #25381143


ソースコード 拡げる

#include <iostream> 
#include <vector>
#include <algorithm>
#include <cmath>
#include <fstream>
#include <random>
#include <string>
using namespace std;


void ScoreCalicurater(string inputTextFile,string OutputTextFile,long long int MagicTimes) {
	ifstream inputFileA(inputTextFile);
	cin.rdbuf(inputFileA.rdbuf());

	long long int N, M, K;
	cin >> N >> M >> K;
	vector<long long int> MonsterPower(N);
	for (int i = 0; i < N; i++) {
		cin >> MonsterPower[i];
	}

	ifstream inputFile(OutputTextFile);
	cin.rdbuf(inputFile.rdbuf());

	int zerocount = 0;
	for (int i = 0; i < MagicTimes; i++) {
		int p, q;
		cin >> p >> q;
		MonsterPower[p] = (MonsterPower[p] + MonsterPower[q]) % K;
	}

	long double Score=0;

	for (auto A:MonsterPower) {
		Score += log2l(K)-log2l(A+1);
		if (A == 0) { zerocount++; }
	}
	Score = ceil(Score);
	if (zerocount>=MonsterPower.size()-1) {
		Score += M - MagicTimes;
	}
	cout << Score;
}

struct  MonsterInfo
{
	long long int Power;
	long long int Number;

	bool operator<(const MonsterInfo& right) const {
		if (Power<right.Power) {
			return true;
		}
		else {
			return false;
		}
	}
};

bool PowerUpMonstersNtimes(long long int& MagicTimes,
	vector<MonsterInfo>& Monsters, long long int K, int GroupNumber, long long int difflimit) {

	//sort(Monsters.begin(),Monsters.end());
	//reverse(Monsters.begin(), Monsters.end());

	for (int i = 0; i < pow(Monsters.size(), GroupNumber);i++) {
		if (MagicTimes<GroupNumber) {
			return false;
		}
		vector<int> eachOrderNumber(GroupNumber);
		for (int k = 0; k < GroupNumber;k++) {
			eachOrderNumber[k] = ((int)(i / pow(GroupNumber, k))) % Monsters.size();
		}
		long long int SumPower=0;
		for (auto p : eachOrderNumber) {
			SumPower = (SumPower + Monsters[p].Power) % K;
		}
		if (SumPower+difflimit<Monsters[eachOrderNumber[0]].Power) {
			Monsters[eachOrderNumber[0]].Power = SumPower;
			for (int k = 1; k < GroupNumber;k++ ) {
				cout << eachOrderNumber[0] << " " << eachOrderNumber[k]<<endl;
			}
			MagicTimes =MagicTimes - ((long long int)GroupNumber - 1);
		}

	}

	return true;
}
bool PowerUpMonstersNtimesStringVer(long long int& MagicTimes,
	vector<MonsterInfo>& Monsters, long long int K, int GroupNumber, 
	long long int difflimit,string& mess) {
	//sort(Monsters.begin(),Monsters.end());
	//reverse(Monsters.begin(), Monsters.end());

	for (int i = 0; i < pow(Monsters.size(), GroupNumber); i++) {
		if (MagicTimes < GroupNumber) {
			return false;
		}
		vector<int> eachOrderNumber(GroupNumber);
		for (int k = 0; k < GroupNumber; k++) {
			eachOrderNumber[k] = ((int)(i / pow(GroupNumber, k))) % Monsters.size();
		}
		long long int SumPower = 0;
		for (auto p : eachOrderNumber) {
			SumPower = (SumPower + Monsters[p].Power) % K;
		}
		if (SumPower + difflimit < Monsters[eachOrderNumber[0]].Power) {
			Monsters[eachOrderNumber[0]].Power = SumPower;
			for (int k = 1; k < GroupNumber; k++) {
				mess=mess+ to_string(eachOrderNumber[0])+ " " +to_string(eachOrderNumber[k])+"\n";
			}
			MagicTimes = MagicTimes - ((long long int)GroupNumber - 1);
		}

	}

	return true;
}

long long int getScore(int K ,vector<MonsterInfo> monsters) {
	long double Score = 0;
	for (int i = 0; i < monsters.size();i++) {
		Score += log2l(K) - log2l(monsters[i].Power + 1);
	}
	Score = ceil(Score);

	return Score;
}

vector<MonsterInfo> randChangeMonsters(int K, vector<MonsterInfo> Monsters, string& message, long long int& MagicCount) {
	message = "";
	for (int i = 0; i < 100; i++) {
		int p = rand() % Monsters.size();
		int q = rand() % Monsters.size();
		Monsters[p].Power = (Monsters[p].Power + Monsters[q].Power) % K;
		message = message + to_string(p) + " " + to_string(q) + "\n";
	}

	return Monsters;
}

void UseMagic(long long int M,long long int K,vector<MonsterInfo> Monsters,int MaxPare) {

	long long int MagicTimes = M;
	for (int i = 2; i <MaxPare;i++) {
		bool DoContinue = PowerUpMonstersNtimes(MagicTimes, Monsters, K, i,0);
		if (DoContinue==false) {
			return;
		}
	}
	srand((unsigned int)time(NULL));
	long long int MaxScore=getScore(K,Monsters);
	string messP="";
	//vector<MonsterInfo> MonstersP = Monsters;
	
	for (int i = 0; i < 100;i++) {
		vector<MonsterInfo> nextMonsters=Monsters;
		string mes;
		long long int Count = MagicTimes;
		nextMonsters=randChangeMonsters(K,Monsters,mes,Count);
		PowerUpMonstersNtimesStringVer(Count,
			nextMonsters, K, 2,
			0, mes);
		int tempScore = getScore(K, nextMonsters);
		if (tempScore>MaxScore) {
			tempScore = MaxScore;
			messP = mes;
			//MonstersP = nextMonsters;
		}
	}
	cout << messP;
	return;
}



int main() {
	/*ifstream inputFile("input.txt");
	cin.rdbuf(inputFile.rdbuf());
	ofstream outputFile("output.txt");
	cout.rdbuf(outputFile.rdbuf());*/
	long long int N, M, K;
	cin >> N >> M >> K;
	vector<MonsterInfo> Monster(N);
	for (int i = 0; i < N;i++) {
		cin >> Monster[i].Power;
		Monster[i].Number = i;
	}
	int MaxPare = 3;
	
	UseMagic(M,K,Monster,MaxPare);

	//ScoreCalicurater("input.txt","output.txt",7);

	return 0;
}

提出情報

提出日時
問題 A - 魔法使いXの戦い
ユーザ norumaya
言語 C++ (GCC 9.2.1)
得点 40622
コード長 5182 Byte
結果 AC
実行時間 589 ms
メモリ 4016 KiB

コンパイルエラー

./Main.cpp: In function ‘void ScoreCalicurater(std::string, std::string, long long int)’:
./Main.cpp:39:15: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<long long int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   39 |  if (zerocount>=MonsterPower.size()-1) {
      |      ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
./Main.cpp: In function ‘long long int getScore(int, std::vector<MonsterInfo>)’:
./Main.cpp:123:20: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<MonsterInfo>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  123 |  for (int i = 0; i < monsters.size();i++) {
      |                  ~~^~~~~~~~~~~~~~~~~
./Main.cpp: In function ‘std::vector<MonsterInfo> randChangeMonsters(int, std::vector<MonsterInfo>, std::string&, long long int&)’:
./Main.cpp:131:109: warning: unused parameter ‘MagicCount’ [-Wunused-parameter]
  131 | vector<MonsterInfo> randChangeMonsters(int K, vector<MonsterInfo> Monsters, string& message, long long int& MagicCount) {
      |                                                                                              ~~~~~~~~~~~~~~~^~~~~~~~~~

ジャッジ結果

セット名 test_all
得点 / 配点 40622 / 448650
結果
AC × 50
セット名 テストケース
test_all subtask_01_01.txt, subtask_01_02.txt, subtask_01_03.txt, subtask_01_04.txt, subtask_01_05.txt, subtask_01_06.txt, subtask_01_07.txt, subtask_01_08.txt, subtask_01_09.txt, subtask_01_10.txt, subtask_01_11.txt, subtask_01_12.txt, subtask_01_13.txt, subtask_01_14.txt, subtask_01_15.txt, subtask_01_16.txt, subtask_01_17.txt, subtask_01_18.txt, subtask_01_19.txt, subtask_01_20.txt, subtask_01_21.txt, subtask_01_22.txt, subtask_01_23.txt, subtask_01_24.txt, subtask_01_25.txt, subtask_01_26.txt, subtask_01_27.txt, subtask_01_28.txt, subtask_01_29.txt, subtask_01_30.txt, subtask_01_31.txt, subtask_01_32.txt, subtask_01_33.txt, subtask_01_34.txt, subtask_01_35.txt, subtask_01_36.txt, subtask_01_37.txt, subtask_01_38.txt, subtask_01_39.txt, subtask_01_40.txt, subtask_01_41.txt, subtask_01_42.txt, subtask_01_43.txt, subtask_01_44.txt, subtask_01_45.txt, subtask_01_46.txt, subtask_01_47.txt, subtask_01_48.txt, subtask_01_49.txt, subtask_01_50.txt
ケース名 結果 実行時間 メモリ
subtask_01_01.txt AC 575 ms 3980 KiB
subtask_01_02.txt AC 570 ms 3892 KiB
subtask_01_03.txt AC 568 ms 3896 KiB
subtask_01_04.txt AC 576 ms 3948 KiB
subtask_01_05.txt AC 565 ms 3952 KiB
subtask_01_06.txt AC 570 ms 3892 KiB
subtask_01_07.txt AC 569 ms 3912 KiB
subtask_01_08.txt AC 568 ms 4012 KiB
subtask_01_09.txt AC 569 ms 3924 KiB
subtask_01_10.txt AC 569 ms 3892 KiB
subtask_01_11.txt AC 569 ms 3888 KiB
subtask_01_12.txt AC 567 ms 3944 KiB
subtask_01_13.txt AC 571 ms 3956 KiB
subtask_01_14.txt AC 568 ms 3832 KiB
subtask_01_15.txt AC 569 ms 3880 KiB
subtask_01_16.txt AC 570 ms 3956 KiB
subtask_01_17.txt AC 589 ms 3940 KiB
subtask_01_18.txt AC 570 ms 3824 KiB
subtask_01_19.txt AC 567 ms 3916 KiB
subtask_01_20.txt AC 569 ms 3892 KiB
subtask_01_21.txt AC 570 ms 3940 KiB
subtask_01_22.txt AC 567 ms 3972 KiB
subtask_01_23.txt AC 569 ms 4016 KiB
subtask_01_24.txt AC 570 ms 3892 KiB
subtask_01_25.txt AC 567 ms 3952 KiB
subtask_01_26.txt AC 570 ms 3824 KiB
subtask_01_27.txt AC 571 ms 3876 KiB
subtask_01_28.txt AC 573 ms 3936 KiB
subtask_01_29.txt AC 570 ms 3888 KiB
subtask_01_30.txt AC 569 ms 3980 KiB
subtask_01_31.txt AC 569 ms 3820 KiB
subtask_01_32.txt AC 569 ms 3876 KiB
subtask_01_33.txt AC 575 ms 3900 KiB
subtask_01_34.txt AC 568 ms 3948 KiB
subtask_01_35.txt AC 572 ms 3952 KiB
subtask_01_36.txt AC 575 ms 4012 KiB
subtask_01_37.txt AC 573 ms 3952 KiB
subtask_01_38.txt AC 570 ms 3828 KiB
subtask_01_39.txt AC 570 ms 4016 KiB
subtask_01_40.txt AC 569 ms 3952 KiB
subtask_01_41.txt AC 572 ms 4012 KiB
subtask_01_42.txt AC 570 ms 3956 KiB
subtask_01_43.txt AC 574 ms 3836 KiB
subtask_01_44.txt AC 570 ms 3980 KiB
subtask_01_45.txt AC 574 ms 3896 KiB
subtask_01_46.txt AC 569 ms 3892 KiB
subtask_01_47.txt AC 575 ms 3888 KiB
subtask_01_48.txt AC 570 ms 3832 KiB
subtask_01_49.txt AC 570 ms 3888 KiB
subtask_01_50.txt AC 573 ms 3932 KiB