Submission #741838

#TimeUsernameProblemLanguageResultExecution timeMemory
741838arthur_nascimentoDungeons Game (IOI21_dungeons)C++17
Compilation error
0 ms0 KiB
#include "dungeons.h"
#include <vector>
#include <bits/stdc++.h>
#define pb push_back
using namespace std;

#define lg 25
#define maxn 50400
#define inf 2002000
#define debug 
#define ll long long

int jmp[lg][lg][maxn];
int inc[lg][lg][maxn];
int least[lg][lg][maxn];

vector<int> strength, inc_lose, go_win, go_lose;

int n;

void init(int N, std::vector<int> s, std::vector<int> p, std::vector<int> w, std::vector<int> l) {

	n = N;
	strength = s;
	inc_lose = p;
	go_win = w;
	go_lose = l;

	strength.pb(0);
	inc_lose.pb(0);
	go_win.pb(n);
	go_lose.pb(n);

	debug("ini!\n");

	for(int k=0;k<lg;k++){

		for(int i=0;i<n;i++){

			if(strength[i] <= (1<<k))
				jmp[k][0][i] = go_win[i],
				inc[k][0][i] = strength[i],
				least[k][0][i] = inf;
			else
				jmp[k][0][i] = go_lose[i],
				inc[k][0][i] = inc_lose[i],
				least[k][0][i] = strength[i];

			if(k == 0)
				debug("%d -> %d\n",i,jmp[k][0][i]);

			if(jmp[k][0][i] == n)
				least[k][0][i] = -1;
			
		}

		for(int j=1;j<lg;j++)
			for(int i=0;i<n;i++)

				jmp[k][j][i] = jmp[k][j-1][jmp[k][j-1][i]],
				inc[k][j][i] = min(1<<25, inc[k][j-1][i] + inc[k][j-1][ jmp[k][j-1][i] ] ),
				least[k][j][i] = max(0, min( least[k][j-1][i], least[k][j-1][ jmp[k][j-1][i] ] - inc[k][j-1][i] ));

	}

	return;
}

long long simulate(int x, int z0) {

	ll z = z0; 
	
	while(x < n){

		ll aux = z, k = 0;
		while(aux > 1)
			aux /= 2, k++;

		k = min(k,24);

		debug("x %d z %d k %d\n",x,z,k);

		for(int i=0;i<n;i++)
			debug("k %d i %d -> %d\n",k,i,jmp[k][0][i]);

		debug("\n");

		for(int j=lg-1;j>=0;j--)
			if(least[k][j][x] > z){

				z += inc[k][j][x];
				debug("%d jmp %d to %d add %d\n",x,1<<j,jmp[k][j][x],inc[k][j][x]);
				x = jmp[k][j][x];
				

			}
		debug("z %d x %d stx %d\n",z,x,strength[x]);
	//	assert(z >= strength[x]);
		//if(!((strength[x] >= (1<<k) || go_win[x] == n))) return 0;

		z += strength[x];
		x = go_win[x];

	}
	debug("ans %d\n",z);

	return z;
}

Compilation message (stderr)

dungeons.cpp: In function 'void init(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
dungeons.cpp:34:8: warning: statement has no effect [-Wunused-value]
   34 |  debug("ini!\n");
      |       ~^~~~~~~~~
dungeons.cpp:50:11: warning: left operand of comma operator has no effect [-Wunused-value]
   50 |     debug("%d -> %d\n",i,jmp[k][0][i]);
      |           ^~~~~~~~~~~~
dungeons.cpp:50:37: warning: right operand of comma operator has no effect [-Wunused-value]
   50 |     debug("%d -> %d\n",i,jmp[k][0][i]);
      |                                     ^
dungeons.cpp: In function 'long long int simulate(int, int)':
dungeons.cpp:79:15: error: no matching function for call to 'min(long long int&, int)'
   79 |   k = min(k,24);
      |               ^
In file included from /usr/include/c++/10/vector:60,
                 from dungeons.h:1,
                 from dungeons.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:230:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  230 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:230:5: note:   template argument deduction/substitution failed:
dungeons.cpp:79:15: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'int')
   79 |   k = min(k,24);
      |               ^
In file included from /usr/include/c++/10/vector:60,
                 from dungeons.h:1,
                 from dungeons.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:278:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  278 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:278:5: note:   template argument deduction/substitution failed:
dungeons.cpp:79:15: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'int')
   79 |   k = min(k,24);
      |               ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from dungeons.cpp:3:
/usr/include/c++/10/bits/stl_algo.h:3468:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)'
 3468 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3468:5: note:   template argument deduction/substitution failed:
dungeons.cpp:79:15: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   79 |   k = min(k,24);
      |               ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from dungeons.cpp:3:
/usr/include/c++/10/bits/stl_algo.h:3474:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)'
 3474 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3474:5: note:   template argument deduction/substitution failed:
dungeons.cpp:79:15: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   79 |   k = min(k,24);
      |               ^
dungeons.cpp:81:9: warning: left operand of comma operator has no effect [-Wunused-value]
   81 |   debug("x %d z %d k %d\n",x,z,k);
      |         ^~~~~~~~~~~~~~~~~~
dungeons.cpp:81:30: warning: right operand of comma operator has no effect [-Wunused-value]
   81 |   debug("x %d z %d k %d\n",x,z,k);
      |                              ^
dungeons.cpp:81:32: warning: right operand of comma operator has no effect [-Wunused-value]
   81 |   debug("x %d z %d k %d\n",x,z,k);
      |                                ^
dungeons.cpp:84:10: warning: left operand of comma operator has no effect [-Wunused-value]
   84 |    debug("k %d i %d -> %d\n",k,i,jmp[k][0][i]);
      |          ^~~~~~~~~~~~~~~~~~~
dungeons.cpp:84:32: warning: right operand of comma operator has no effect [-Wunused-value]
   84 |    debug("k %d i %d -> %d\n",k,i,jmp[k][0][i]);
      |                                ^
dungeons.cpp:84:45: warning: right operand of comma operator has no effect [-Wunused-value]
   84 |    debug("k %d i %d -> %d\n",k,i,jmp[k][0][i]);
      |                                             ^
dungeons.cpp:86:9: warning: statement has no effect [-Wunused-value]
   86 |   debug("\n");
      |        ~^~~~~
dungeons.cpp:92:11: warning: left operand of comma operator has no effect [-Wunused-value]
   92 |     debug("%d jmp %d to %d add %d\n",x,1<<j,jmp[k][j][x],inc[k][j][x]);
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~~
dungeons.cpp:92:43: warning: right operand of comma operator has no effect [-Wunused-value]
   92 |     debug("%d jmp %d to %d add %d\n",x,1<<j,jmp[k][j][x],inc[k][j][x]);
      |                                           ^
dungeons.cpp:92:41: warning: right operand of comma operator has no effect [-Wunused-value]
   92 |     debug("%d jmp %d to %d add %d\n",x,1<<j,jmp[k][j][x],inc[k][j][x]);
      |                                        ~^~~
dungeons.cpp:92:56: warning: right operand of comma operator has no effect [-Wunused-value]
   92 |     debug("%d jmp %d to %d add %d\n",x,1<<j,jmp[k][j][x],inc[k][j][x]);
      |                                             ~~~~~~~~~~~^
dungeons.cpp:97:9: warning: left operand of comma operator has no effect [-Wunused-value]
   97 |   debug("z %d x %d stx %d\n",z,x,strength[x]);
      |         ^~~~~~~~~~~~~~~~~~~~
dungeons.cpp:97:32: warning: right operand of comma operator has no effect [-Wunused-value]
   97 |   debug("z %d x %d stx %d\n",z,x,strength[x]);
      |                                ^
dungeons.cpp:97:44: warning: right operand of comma operator has no effect [-Wunused-value]
   97 |   debug("z %d x %d stx %d\n",z,x,strength[x]);
      |                                            ^
dungeons.cpp:105:8: warning: left operand of comma operator has no effect [-Wunused-value]
  105 |  debug("ans %d\n",z);
      |        ^~~~~~~~~~