답안 #335049

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
335049 2020-12-11T01:31:32 Z rqi Brunhilda’s Birthday (BOI13_brunhilda) C++14
0 / 100
1000 ms 39956 KB
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef double db; 
typedef string str; 

typedef pair<int,int> pi;
typedef pair<ll,ll> pl; 
typedef pair<db,db> pd; 

typedef vector<int> vi; 
typedef vector<bool> vb; 
typedef vector<ll> vl; 
typedef vector<db> vd; 
typedef vector<str> vs; 
typedef vector<pi> vpi;
typedef vector<pl> vpl; 
typedef vector<pd> vpd; 

#define mp make_pair
#define f first
#define s second
#define sz(x) (int)(x).size()
#define all(x) begin(x), end(x)
#define rall(x) (x).rbegin(), (x).rend() 
#define sor(x) sort(all(x)) 
#define rsz resize
#define ins insert 
#define ft front() 
#define bk back()
#define pf push_front 
#define pb push_back
#define eb emplace_back 
#define lb lower_bound 
#define ub upper_bound 

#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define F0R(i,a) FOR(i,0,a)
#define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i)
#define R0F(i,a) ROF(i,0,a)
#define trav(a,x) for (auto& a: x)

const int MOD = 1e9+7; // 998244353;
const int MX = 2e5+5; 
const ll INF = 1e18; 
const ld PI = acos((ld)-1);
const int xd[4] = {1,0,-1,0}, yd[4] = {0,1,0,-1}; 
mt19937 rng((uint32_t)chrono::steady_clock::now().time_since_epoch().count()); 

template<class T> bool ckmin(T& a, const T& b) { 
	return b < a ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { 
	return a < b ? a = b, 1 : 0; } 
constexpr int pct(int x) { return __builtin_popcount(x); } 
constexpr int bits(int x) { return 31-__builtin_clz(x); } // floor(log2(x)) 
ll cdiv(ll a, ll b) { return a/b+((a^b)>0&&a%b); } // divide a by b rounded up
ll fdiv(ll a, ll b) { return a/b-((a^b)<0&&a%b); } // divide a by b rounded down
ll half(ll x) { return fdiv(x,2); }

template<class T, class U> T fstTrue(T lo, T hi, U f) { 
	// note: if (lo+hi)/2 is used instead of half(lo+hi) then this will loop infinitely when lo=hi
	hi ++; assert(lo <= hi); // assuming f is increasing
	while (lo < hi) { // find first index such that f is true 
		T mid = half(lo+hi);
		f(mid) ? hi = mid : lo = mid+1; 
	} 
	return lo;
}
template<class T, class U> T lstTrue(T lo, T hi, U f) {
	lo --; assert(lo <= hi); // assuming f is decreasing
	while (lo < hi) { // find first index such that f is true 
		T mid = half(lo+hi+1);
		f(mid) ? lo = mid : hi = mid-1;
	} 
	return lo;
}
template<class T> void remDup(vector<T>& v) { 
	sort(all(v)); v.erase(unique(all(v)),end(v)); }

// INPUT
template<class A> void re(complex<A>& c);
template<class A, class B> void re(pair<A,B>& p);
template<class A> void re(vector<A>& v);
template<class A, size_t SZ> void re(array<A,SZ>& a);

template<class T> void re(T& x) { cin >> x; }
void re(db& d) { str t; re(t); d = stod(t); }
void re(ld& d) { str t; re(t); d = stold(t); }
template<class H, class... T> void re(H& h, T&... t) { re(h); re(t...); }

template<class A> void re(complex<A>& c) { A a,b; re(a,b); c = {a,b}; }
template<class A, class B> void re(pair<A,B>& p) { re(p.f,p.s); }
template<class A> void re(vector<A>& x) { trav(a,x) re(a); }
template<class A, size_t SZ> void re(array<A,SZ>& x) { trav(a,x) re(a); }

// TO_STRING
#define ts to_string
str ts(char c) { return str(1,c); }
str ts(const char* s) { return (str)s; }
str ts(str s) { return s; }
str ts(bool b) { 
	#ifdef LOCAL
		return b ? "true" : "false"; 
	#else 
		return ts((int)b);
	#endif
}
template<class A> str ts(complex<A> c) { 
	stringstream ss; ss << c; return ss.str(); }
str ts(vector<bool> v) {
	str res = "{"; F0R(i,sz(v)) res += char('0'+v[i]);
	res += "}"; return res; }
template<size_t SZ> str ts(bitset<SZ> b) {
	str res = ""; F0R(i,SZ) res += char('0'+b[i]);
	return res; }
template<class A, class B> str ts(pair<A,B> p);
template<class T> str ts(T v) { // containers with begin(), end()
	#ifdef LOCAL
		bool fst = 1; str res = "{";
		for (const auto& x: v) {
			if (!fst) res += ", ";
			fst = 0; res += ts(x);
		}
		res += "}"; return res;
	#else
		bool fst = 1; str res = "";
		for (const auto& x: v) {
			if (!fst) res += " ";
			fst = 0; res += ts(x);
		}
		return res;

	#endif
}
template<class A, class B> str ts(pair<A,B> p) {
	#ifdef LOCAL
		return "("+ts(p.f)+", "+ts(p.s)+")"; 
	#else
		return ts(p.f)+" "+ts(p.s);
	#endif
}

// OUTPUT
template<class A> void pr(A x) { cout << ts(x); }
template<class H, class... T> void pr(const H& h, const T&... t) { 
	pr(h); pr(t...); }
void ps() { pr("\n"); } // print w/ spaces
template<class H, class... T> void ps(const H& h, const T&... t) { 
	pr(h); if (sizeof...(t)) pr(" "); ps(t...); }

// DEBUG
void DBG() { cerr << "]" << endl; }
template<class H, class... T> void DBG(H h, T... t) {
	cerr << ts(h); if (sizeof...(t)) cerr << ", ";
	DBG(t...); }
#ifdef LOCAL // compile with -DLOCAL, chk -> fake assert
	#define dbg(...) cerr << "Line(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__)
	#define chk(...) if (!(__VA_ARGS__)) cerr << "Line(" << __LINE__ << ") -> function(" \
		 << __FUNCTION__  << ") -> CHK FAILED: (" << #__VA_ARGS__ << ")" << "\n", exit(0);
#else
	#define dbg(...) 0
	#define chk(...) 0
#endif

// FILE I/O
void setIn(str s) { freopen(s.c_str(),"r",stdin); }
void setOut(str s) { freopen(s.c_str(),"w",stdout); }
void unsyncIO() { cin.tie(0)->sync_with_stdio(0); }
void setIO(str s = "") {
	unsyncIO();
	// cin.exceptions(cin.failbit); 
	// throws exception when do smth illegal
	// ex. try to read letter into int
	if (sz(s)) { setIn(s+".in"), setOut(s+".out"); } // for USACO
}

int m, Q;
int p[100005];
int ans[10000005];
int main() {
	setIO();
	cin >> m >> Q;
	for(int i = 1; i <= m; i++){
		cin >> p[i];
	}

	ans[0] = 0;
	for(int i = 1; i <= 10000000; i++){
		int maxdif = 0;
		int tot = 0;

		int lo = 1;
		int hi = m;

		while(lo < hi){
			int mid = (lo+hi)/2+1;
			if(p[mid] >= i) hi = mid-1;
			else lo = mid;
		}

		for(int j = lo; j >= 1; j--){
			if(p[j] <= maxdif) break;
			ckmax(maxdif, i % p[j]);
			tot++;
		}
		//dbg(i, tot);
		if(maxdif == 0){
			ans[i] = MOD;
		}
		else{
			ans[i] = ans[i-maxdif]+1;
		}
	}

	for(int i = 1; i <= Q; i++){
		int n;
		cin >> n;
		if(ans[n] >= MOD){
			ps("oo");
		}
		else ps(ans[n]);
	}

	// you should actually read the stuff at the bottom
}

/* stuff you should look for
	* int overflow, array bounds
	* special cases (n=1?)
	* do smth instead of nothing and stay organized
	* WRITE STUFF DOWN
*/

Compilation message

brunhilda.cpp: In function 'void setIn(str)':
brunhilda.cpp:168:28: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  168 | void setIn(str s) { freopen(s.c_str(),"r",stdin); }
      |                     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
brunhilda.cpp: In function 'void setOut(str)':
brunhilda.cpp:169:29: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  169 | void setOut(str s) { freopen(s.c_str(),"w",stdout); }
      |                      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 220 ms 39532 KB Output isn't correct
2 Incorrect 691 ms 39672 KB Output isn't correct
3 Incorrect 190 ms 39332 KB Output isn't correct
4 Incorrect 695 ms 39704 KB Output isn't correct
5 Incorrect 393 ms 39532 KB Output isn't correct
6 Incorrect 224 ms 39600 KB Output isn't correct
7 Incorrect 191 ms 39532 KB Output isn't correct
8 Incorrect 182 ms 39532 KB Output isn't correct
9 Incorrect 259 ms 39532 KB Output isn't correct
10 Incorrect 305 ms 39532 KB Output isn't correct
11 Incorrect 334 ms 39460 KB Output isn't correct
12 Execution timed out 1038 ms 30956 KB Time limit exceeded
13 Execution timed out 1085 ms 14316 KB Time limit exceeded
14 Execution timed out 1082 ms 13988 KB Time limit exceeded
15 Incorrect 522 ms 39532 KB Output isn't correct
16 Incorrect 693 ms 39660 KB Output isn't correct
17 Incorrect 561 ms 39660 KB Output isn't correct
18 Incorrect 693 ms 39532 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1055 ms 1328 KB Time limit exceeded
2 Execution timed out 1079 ms 1900 KB Time limit exceeded
3 Execution timed out 1088 ms 1132 KB Time limit exceeded
4 Execution timed out 1091 ms 1644 KB Time limit exceeded
5 Execution timed out 1086 ms 1068 KB Time limit exceeded
6 Execution timed out 1086 ms 9392 KB Time limit exceeded
7 Execution timed out 1087 ms 1516 KB Time limit exceeded
8 Execution timed out 1090 ms 15084 KB Time limit exceeded
9 Execution timed out 1091 ms 1004 KB Time limit exceeded
10 Execution timed out 1087 ms 1388 KB Time limit exceeded
11 Execution timed out 1091 ms 1004 KB Time limit exceeded
12 Execution timed out 1092 ms 5404 KB Time limit exceeded
13 Execution timed out 1092 ms 1900 KB Time limit exceeded
14 Execution timed out 1086 ms 1792 KB Time limit exceeded
15 Execution timed out 1094 ms 1260 KB Time limit exceeded
16 Execution timed out 1037 ms 1772 KB Time limit exceeded
17 Execution timed out 1094 ms 13036 KB Time limit exceeded
18 Execution timed out 1068 ms 1388 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1053 ms 1004 KB Time limit exceeded
2 Execution timed out 1091 ms 1004 KB Time limit exceeded
3 Execution timed out 1072 ms 1004 KB Time limit exceeded
4 Execution timed out 1059 ms 1516 KB Time limit exceeded
5 Execution timed out 1044 ms 1520 KB Time limit exceeded
6 Execution timed out 1095 ms 1004 KB Time limit exceeded
7 Execution timed out 1052 ms 1300 KB Time limit exceeded
8 Execution timed out 1051 ms 1176 KB Time limit exceeded
9 Execution timed out 1089 ms 1132 KB Time limit exceeded
10 Execution timed out 1038 ms 1104 KB Time limit exceeded
11 Execution timed out 1049 ms 996 KB Time limit exceeded
12 Execution timed out 1092 ms 876 KB Time limit exceeded
13 Execution timed out 1091 ms 1068 KB Time limit exceeded
14 Incorrect 480 ms 39788 KB Output isn't correct
15 Execution timed out 1089 ms 968 KB Time limit exceeded
16 Execution timed out 1062 ms 1132 KB Time limit exceeded
17 Execution timed out 1081 ms 1052 KB Time limit exceeded
18 Execution timed out 1081 ms 1260 KB Time limit exceeded
19 Execution timed out 1090 ms 1772 KB Time limit exceeded
20 Execution timed out 1095 ms 1060 KB Time limit exceeded
21 Incorrect 606 ms 39956 KB Output isn't correct
22 Execution timed out 1098 ms 1132 KB Time limit exceeded
23 Execution timed out 1042 ms 1092 KB Time limit exceeded
24 Execution timed out 1092 ms 10348 KB Time limit exceeded
25 Execution timed out 1079 ms 3392 KB Time limit exceeded
26 Execution timed out 1083 ms 1512 KB Time limit exceeded
27 Execution timed out 1093 ms 1132 KB Time limit exceeded
28 Execution timed out 1095 ms 16876 KB Time limit exceeded
29 Execution timed out 1099 ms 1260 KB Time limit exceeded
30 Execution timed out 1098 ms 1004 KB Time limit exceeded
31 Execution timed out 1093 ms 1260 KB Time limit exceeded
32 Execution timed out 1076 ms 1900 KB Time limit exceeded
33 Execution timed out 1088 ms 3932 KB Time limit exceeded
34 Execution timed out 1089 ms 1260 KB Time limit exceeded
35 Execution timed out 1083 ms 5100 KB Time limit exceeded
36 Execution timed out 1094 ms 1132 KB Time limit exceeded
37 Execution timed out 1092 ms 1516 KB Time limit exceeded
38 Execution timed out 1080 ms 1004 KB Time limit exceeded
39 Execution timed out 1080 ms 2284 KB Time limit exceeded
40 Execution timed out 1098 ms 1008 KB Time limit exceeded
41 Execution timed out 1097 ms 1516 KB Time limit exceeded
42 Execution timed out 1074 ms 10236 KB Time limit exceeded