Submission #644626

#TimeUsernameProblemLanguageResultExecution timeMemory
644626guagua0407Toll (BOI17_toll)C++17
100 / 100
127 ms101520 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

void setIO(string s) {
	freopen((s + ".in").c_str(), "r", stdin);
	freopen((s + ".out").c_str(), "w", stdout);
}

const int mxn=5e4+5;
int dp[mxn][20][5][5];
int jump[mxn][20][5][5];
int ans[5][5];
int tmp[5][5];
int k,n,m,q;

void ckmin(int a[5][5],int b[5][5],int c[5][5]){
	for(int i=0;i<k;i++){
		for(int j=0;j<k;j++){
			for(int z=0;z<k;z++){
				a[i][z]=min(a[i][z],b[i][j]+c[j][z]);
			}
		}
	}
}

int main() {_
	//setIO("wayne");
	cin>>k>>n>>m>>q;
	memset(dp,0x3f,sizeof dp);
	for(int i=0;i<m;i++){
		int a,b,t;
		cin>>a>>b>>t;
		dp[a/k][0][a%k][b%k]=t;
	}
	for (int j = 1; j < 17; j++) {
		for (int i = 0; i + (1 << j) < (n + k - 1) / k; i++) {
			ckmin(dp[i][j], dp[i][j - 1], dp[i + (1 << j - 1)][j - 1]);
		}
	}

	while (q--) {
		int a, b;
		cin >> a >> b;
		memset(ans, 0x3f, sizeof ans);
		for (int i = 0; i < 5; i++) ans[i][i] = 0;
		for (int curr = a / k, dest = b / k, i = 16; ~i; i--) {
			if (curr + (1 << i) <= dest) {
				memset(tmp, 0x3f, sizeof tmp);
				ckmin(tmp, ans, dp[curr][i]);
				memcpy(ans, tmp, sizeof ans);
				curr += (1 << i);
			}
		}
		cout << (ans[a % k][b % k] == 0x3f3f3f3f ? -1 : ans[a % k][b % k]) << '\n';
	}
	return 0;
}
//maybe its multiset not set

Compilation message (stderr)

toll.cpp: In function 'int main()':
toll.cpp:42:49: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   42 |    ckmin(dp[i][j], dp[i][j - 1], dp[i + (1 << j - 1)][j - 1]);
      |                                               ~~^~~
toll.cpp: In function 'void setIO(std::string)':
toll.cpp:10:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 |  freopen((s + ".in").c_str(), "r", stdin);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
toll.cpp:11:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   11 |  freopen((s + ".out").c_str(), "w", stdout);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...