답안 #567813

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
567813 2022-05-24T08:41:23 Z jamezzz Copy and Paste 3 (JOI22_copypaste3) C++17
25 / 100
3000 ms 1925912 KB
#include <bits/stdc++.h>
using namespace std;

#ifdef DEBUG
#define dbg(...) printf(__VA_ARGS__);
#define getchar_unlocked getchar
#else
#define dbg(...)
#endif
#define sf scanf
#define pf printf
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)x.size()
#define mnto(x,y) x=min(x,(__typeof__(x))y)
#define mxto(x,y) x=max(x,(__typeof__(x))y)
#define INF 1023456789
#define LINF 1023456789123456789
#define all(x) x.begin(), x.end()
#define disc(x) sort(all(x));x.resize(unique(all(x))-x.begin());
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef pair<ll, ll> pll;
typedef tuple<int, int, int> iii;
typedef tuple<int, int, int, int> iiii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<pll> vll;
mt19937 rng(time(0));

#define mod 1000000007
#define mod2 1000000009

inline int add(int a,int b){
	int r=a+b;
	while(r>=mod)r-=mod;
	while(r<0)r+=mod;
	return r;
}

inline int mult(int a,int b){
	return (int)(((ll)(a*b))%mod);
}

inline int rd(){
	int x=0;
	char ch=getchar_unlocked();
	while(!(ch&16))ch=getchar();//keep reading while current character is whitespace
    while(ch&16){//this will break when ‘\n’ or ‘ ‘ is encountered
		x=(x<<3)+(x<<1)+(ch&15);
		ch=getchar_unlocked();
	}
	return x;
}

int n,a,b,c,cnt;
char s[2505];
int hh[2505][2505],num[2505*2505];
map<ii,int> mp;
vector<ii> v[2505*2505];
vector<int> pos[2505];
ll memo[2505][2505];
unordered_map<int,int> vis[2505][2505];

ll dp(int l,int r){
	if(l==r)return a;
	if(memo[l][r]!=-1)return memo[l][r];
	ll ans=(ll)(r-l+1)*a;
	for(int i=l;i<=r;++i){
		for(int j:pos[i]){
			if(j>r)break;
			int x=hh[i][j];
			if(vis[l][r][x]!=0)continue;
			vis[l][r][x]=1;
			int far=l-1,cnt=0;
			for(ii pr:v[x]){
				if(pr.se>r)break;
				if(far<pr.fi&&pr.se<=r){
					++cnt;
					far=pr.se;
				}
			}
			if(cnt==1)continue;
			ans=min(ans,dp(v[x][0].fi,v[x][0].se)+b+(ll)cnt*c+(ll)(r-l+1-cnt*(j-i+1))*a);
		}
	}
	return memo[l][r]=ans;
}

int main(){
	sf("%d",&n);
	sf(" %s",&s);
	sf("%d%d%d",&a,&b,&c);
	for(int i=0;i<n;++i){
		ll cur=0,cur2=0;
		ll pw=1,pw2=1;
		for(int j=i;j<n;++j){
			cur+=pw*(s[j]-'a'+1);
			cur2+=pw2*(s[j]-'a'+1);
			cur%=mod;
			cur2%=mod2;
			pw*=31;pw%=mod;
			pw2*=31;pw2%=mod2;
			ii pr=ii((int)cur,(int)cur2);
			if(!mp.count(pr)){
				mp[pr]=cnt++;
			}
			hh[i][j]=mp[pr];
			v[hh[i][j]].pb({i,j});
		}
	}
	
	for(int i=n-1;i>=0;--i){
		for(int j=i;j<n;++j){
			if(num[hh[i][j]]!=0)pos[i].pb(j);
			++num[hh[i][j]];
		}
	}
	
	memset(memo,-1,sizeof memo);
	pf("%lld\n",dp(0,n-1));
}

Compilation message

copypaste3.cpp: In function 'int main()':
copypaste3.cpp:94:8: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'char (*)[2505]' [-Wformat=]
   94 |  sf(" %s",&s);
      |       ~^  ~~
      |        |  |
      |        |  char (*)[2505]
      |        char*
copypaste3.cpp:93:4: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   93 |  sf("%d",&n);
      |    ^
copypaste3.cpp:94:4: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   94 |  sf(" %s",&s);
      |    ^
copypaste3.cpp:95:4: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   95 |  sf("%d%d%d",&a,&b,&c);
      |    ^
# 결과 실행 시간 메모리 Grader output
1 Correct 271 ms 540696 KB Output is correct
2 Correct 267 ms 540792 KB Output is correct
3 Correct 260 ms 540688 KB Output is correct
4 Correct 284 ms 540660 KB Output is correct
5 Correct 266 ms 540692 KB Output is correct
6 Correct 267 ms 540620 KB Output is correct
7 Correct 268 ms 540692 KB Output is correct
8 Correct 275 ms 540700 KB Output is correct
9 Correct 330 ms 540668 KB Output is correct
10 Correct 267 ms 540840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 300 ms 540752 KB Output is correct
2 Correct 263 ms 540724 KB Output is correct
3 Correct 1580 ms 599516 KB Output is correct
4 Correct 1909 ms 607840 KB Output is correct
5 Correct 2398 ms 617956 KB Output is correct
6 Correct 2856 ms 630128 KB Output is correct
7 Execution timed out 3112 ms 641852 KB Time limit exceeded
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 271 ms 540696 KB Output is correct
2 Correct 267 ms 540792 KB Output is correct
3 Correct 260 ms 540688 KB Output is correct
4 Correct 284 ms 540660 KB Output is correct
5 Correct 266 ms 540692 KB Output is correct
6 Correct 267 ms 540620 KB Output is correct
7 Correct 268 ms 540692 KB Output is correct
8 Correct 275 ms 540700 KB Output is correct
9 Correct 330 ms 540668 KB Output is correct
10 Correct 267 ms 540840 KB Output is correct
11 Correct 269 ms 540732 KB Output is correct
12 Correct 287 ms 540824 KB Output is correct
13 Correct 286 ms 540704 KB Output is correct
14 Correct 323 ms 540716 KB Output is correct
15 Correct 291 ms 540748 KB Output is correct
16 Correct 273 ms 540700 KB Output is correct
17 Correct 323 ms 540704 KB Output is correct
18 Correct 275 ms 540660 KB Output is correct
19 Correct 282 ms 540636 KB Output is correct
20 Correct 302 ms 540584 KB Output is correct
21 Correct 282 ms 540728 KB Output is correct
22 Correct 304 ms 540848 KB Output is correct
23 Correct 280 ms 540732 KB Output is correct
24 Correct 295 ms 540888 KB Output is correct
25 Correct 282 ms 540844 KB Output is correct
26 Correct 274 ms 540844 KB Output is correct
27 Correct 266 ms 540788 KB Output is correct
28 Correct 271 ms 540764 KB Output is correct
29 Correct 279 ms 540864 KB Output is correct
30 Correct 274 ms 540952 KB Output is correct
31 Correct 308 ms 540880 KB Output is correct
32 Correct 303 ms 540848 KB Output is correct
33 Correct 278 ms 540752 KB Output is correct
34 Correct 261 ms 540620 KB Output is correct
35 Correct 291 ms 540684 KB Output is correct
36 Correct 274 ms 540588 KB Output is correct
37 Correct 278 ms 540632 KB Output is correct
38 Correct 302 ms 540724 KB Output is correct
39 Correct 300 ms 540824 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 271 ms 540696 KB Output is correct
2 Correct 267 ms 540792 KB Output is correct
3 Correct 260 ms 540688 KB Output is correct
4 Correct 284 ms 540660 KB Output is correct
5 Correct 266 ms 540692 KB Output is correct
6 Correct 267 ms 540620 KB Output is correct
7 Correct 268 ms 540692 KB Output is correct
8 Correct 275 ms 540700 KB Output is correct
9 Correct 330 ms 540668 KB Output is correct
10 Correct 267 ms 540840 KB Output is correct
11 Correct 269 ms 540732 KB Output is correct
12 Correct 287 ms 540824 KB Output is correct
13 Correct 286 ms 540704 KB Output is correct
14 Correct 323 ms 540716 KB Output is correct
15 Correct 291 ms 540748 KB Output is correct
16 Correct 273 ms 540700 KB Output is correct
17 Correct 323 ms 540704 KB Output is correct
18 Correct 275 ms 540660 KB Output is correct
19 Correct 282 ms 540636 KB Output is correct
20 Correct 302 ms 540584 KB Output is correct
21 Correct 282 ms 540728 KB Output is correct
22 Correct 304 ms 540848 KB Output is correct
23 Correct 280 ms 540732 KB Output is correct
24 Correct 295 ms 540888 KB Output is correct
25 Correct 282 ms 540844 KB Output is correct
26 Correct 274 ms 540844 KB Output is correct
27 Correct 266 ms 540788 KB Output is correct
28 Correct 271 ms 540764 KB Output is correct
29 Correct 279 ms 540864 KB Output is correct
30 Correct 274 ms 540952 KB Output is correct
31 Correct 308 ms 540880 KB Output is correct
32 Correct 303 ms 540848 KB Output is correct
33 Correct 278 ms 540752 KB Output is correct
34 Correct 261 ms 540620 KB Output is correct
35 Correct 291 ms 540684 KB Output is correct
36 Correct 274 ms 540588 KB Output is correct
37 Correct 278 ms 540632 KB Output is correct
38 Correct 302 ms 540724 KB Output is correct
39 Correct 300 ms 540824 KB Output is correct
40 Correct 274 ms 541344 KB Output is correct
41 Correct 281 ms 542160 KB Output is correct
42 Correct 326 ms 543620 KB Output is correct
43 Correct 290 ms 543548 KB Output is correct
44 Correct 275 ms 543528 KB Output is correct
45 Correct 287 ms 543560 KB Output is correct
46 Correct 274 ms 543516 KB Output is correct
47 Correct 472 ms 621600 KB Output is correct
48 Correct 762 ms 720568 KB Output is correct
49 Correct 553 ms 665920 KB Output is correct
50 Correct 529 ms 646140 KB Output is correct
51 Correct 587 ms 659952 KB Output is correct
52 Correct 608 ms 662964 KB Output is correct
53 Correct 318 ms 543464 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 271 ms 540696 KB Output is correct
2 Correct 267 ms 540792 KB Output is correct
3 Correct 260 ms 540688 KB Output is correct
4 Correct 284 ms 540660 KB Output is correct
5 Correct 266 ms 540692 KB Output is correct
6 Correct 267 ms 540620 KB Output is correct
7 Correct 268 ms 540692 KB Output is correct
8 Correct 275 ms 540700 KB Output is correct
9 Correct 330 ms 540668 KB Output is correct
10 Correct 267 ms 540840 KB Output is correct
11 Correct 269 ms 540732 KB Output is correct
12 Correct 287 ms 540824 KB Output is correct
13 Correct 286 ms 540704 KB Output is correct
14 Correct 323 ms 540716 KB Output is correct
15 Correct 291 ms 540748 KB Output is correct
16 Correct 273 ms 540700 KB Output is correct
17 Correct 323 ms 540704 KB Output is correct
18 Correct 275 ms 540660 KB Output is correct
19 Correct 282 ms 540636 KB Output is correct
20 Correct 302 ms 540584 KB Output is correct
21 Correct 282 ms 540728 KB Output is correct
22 Correct 304 ms 540848 KB Output is correct
23 Correct 280 ms 540732 KB Output is correct
24 Correct 295 ms 540888 KB Output is correct
25 Correct 282 ms 540844 KB Output is correct
26 Correct 274 ms 540844 KB Output is correct
27 Correct 266 ms 540788 KB Output is correct
28 Correct 271 ms 540764 KB Output is correct
29 Correct 279 ms 540864 KB Output is correct
30 Correct 274 ms 540952 KB Output is correct
31 Correct 308 ms 540880 KB Output is correct
32 Correct 303 ms 540848 KB Output is correct
33 Correct 278 ms 540752 KB Output is correct
34 Correct 261 ms 540620 KB Output is correct
35 Correct 291 ms 540684 KB Output is correct
36 Correct 274 ms 540588 KB Output is correct
37 Correct 278 ms 540632 KB Output is correct
38 Correct 302 ms 540724 KB Output is correct
39 Correct 300 ms 540824 KB Output is correct
40 Correct 274 ms 541344 KB Output is correct
41 Correct 281 ms 542160 KB Output is correct
42 Correct 326 ms 543620 KB Output is correct
43 Correct 290 ms 543548 KB Output is correct
44 Correct 275 ms 543528 KB Output is correct
45 Correct 287 ms 543560 KB Output is correct
46 Correct 274 ms 543516 KB Output is correct
47 Correct 472 ms 621600 KB Output is correct
48 Correct 762 ms 720568 KB Output is correct
49 Correct 553 ms 665920 KB Output is correct
50 Correct 529 ms 646140 KB Output is correct
51 Correct 587 ms 659952 KB Output is correct
52 Correct 608 ms 662964 KB Output is correct
53 Correct 318 ms 543464 KB Output is correct
54 Correct 344 ms 553024 KB Output is correct
55 Correct 550 ms 560016 KB Output is correct
56 Correct 892 ms 597072 KB Output is correct
57 Correct 922 ms 595820 KB Output is correct
58 Correct 919 ms 595704 KB Output is correct
59 Correct 909 ms 595640 KB Output is correct
60 Correct 878 ms 595596 KB Output is correct
61 Execution timed out 3154 ms 1925912 KB Time limit exceeded
62 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 271 ms 540696 KB Output is correct
2 Correct 267 ms 540792 KB Output is correct
3 Correct 260 ms 540688 KB Output is correct
4 Correct 284 ms 540660 KB Output is correct
5 Correct 266 ms 540692 KB Output is correct
6 Correct 267 ms 540620 KB Output is correct
7 Correct 268 ms 540692 KB Output is correct
8 Correct 275 ms 540700 KB Output is correct
9 Correct 330 ms 540668 KB Output is correct
10 Correct 267 ms 540840 KB Output is correct
11 Correct 300 ms 540752 KB Output is correct
12 Correct 263 ms 540724 KB Output is correct
13 Correct 1580 ms 599516 KB Output is correct
14 Correct 1909 ms 607840 KB Output is correct
15 Correct 2398 ms 617956 KB Output is correct
16 Correct 2856 ms 630128 KB Output is correct
17 Execution timed out 3112 ms 641852 KB Time limit exceeded
18 Halted 0 ms 0 KB -