제출 #111417

#제출 시각아이디문제언어결과실행 시간메모리
111417ecasdqinaBoat (APIO16_boat)C++14
31 / 100
1543 ms525312 KiB
#include <bits/stdc++.h>
using namespace std::literals::string_literals;
using i64 = long long;
using std::cout;
using std::endl;
using std::cin;

template<typename T>
std::vector<T> make_v(size_t a){return std::vector<T>(a);}

template<typename T,typename... Ts>
auto make_v(size_t a,Ts... ts){
  return std::vector<decltype(make_v<T>(ts...))>(a,make_v<T>(ts...));
}

int main() {
	int n; scanf("%d", &n); std::vector<int> a(n), b(n);
	for(int i = 0; i < n; i++) scanf("%d%d", &a[i], &b[i]);
	
	const int MOD = 1e9 + 7;
	auto dp = make_v<i64>(n + 1, 0); dp[0].resize(1, 1);
	auto sub = make_v<i64>(n + 1, 0); sub[0].resize(2, 0); sub[0][1] = 1;
	for(int i = 0; i < n; i++) {
		dp[i + 1].resize(b[i] - a[i] + 1, 0);
		sub[i + 1].resize(b[i] - a[i] + 2, 0);
		for(int j = 0; j < i + 1; j++) {
			for(int k = a[i]; k < b[i] + 1; k++) {
				if(j and k < a[j - 1]) continue;
				int ind = 0;
				if(j) ind = std::min((int)dp[j].size(), k - a[j - 1]);
				else ind = 1;
				
				(dp[i + 1][k - a[i]] += sub[j][ind]) %= MOD;
			}
		}
		for(int j = 0; j < dp[i + 1].size(); j++) sub[i + 1][j + 1] = (sub[i + 1][j] + dp[i + 1][j]) % MOD;
	
	//	for(auto v: dp[i + 1]) cout << v << " "; cout << endl;
	//	for(auto v: sub[i + 1]) cout << v << " "; cout << endl;
	}
	
	i64 ans = 0;
	for(int i = 1; i < dp.size(); i++) for(int j = 0; j < dp[i].size(); j++) (ans += dp[i][j]) %= MOD;
	printf("%lld\n", ans);
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

boat.cpp: In function 'int main()':
boat.cpp:36:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j = 0; j < dp[i + 1].size(); j++) sub[i + 1][j + 1] = (sub[i + 1][j] + dp[i + 1][j]) % MOD;
                  ~~^~~~~~~~~~~~~~~~~~
boat.cpp:43:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 1; i < dp.size(); i++) for(int j = 0; j < dp[i].size(); j++) (ans += dp[i][j]) %= MOD;
                 ~~^~~~~~~~~~~
boat.cpp:43:54: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 1; i < dp.size(); i++) for(int j = 0; j < dp[i].size(); j++) (ans += dp[i][j]) %= MOD;
                                                    ~~^~~~~~~~~~~~~~
boat.cpp:17:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  int n; scanf("%d", &n); std::vector<int> a(n), b(n);
         ~~~~~^~~~~~~~~~
boat.cpp:18:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i = 0; i < n; i++) scanf("%d%d", &a[i], &b[i]);
                             ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...