Submission #539313

# Submission time Handle Problem Language Result Execution time Memory
539313 2022-03-18T17:08:12 Z mars4 Nafta (COI15_nafta) C++17
34 / 100
1000 ms 102680 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp> 

using namespace std;
using namespace __gnu_pbds; 

#define ff              first
#define ss              second
#define ll              int64_t
#define ld              long double
#define nl              cout<<"\n"
#define i128            __int128_t
#define all(v)          v.begin(),v.end()
#define mset(a,v)       memset((a),(v),sizeof(a))
#define forn(i,a,b)     for(int64_t i=int64_t(a);i<int64_t(b);++i)
#define forb(i,a,b)     for(int64_t i=int64_t(a);i>=int64_t(b);--i)
#define fastio()        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define mod         1'000'000'007
#define mod2        998'244'353 
#define inf         1'000'000'000'000'007
#define pi          3.14159265358979323846

template<class key,class cmp=std::less<key>>
using ordered_set=tree<key,null_type,cmp,rb_tree_tag,tree_order_statistics_node_update>;

template<class L,class R> ostream& operator<<(ostream& out,pair<L,R> &p)        {return out<<"("<<p.ff<<", "<<p.ss<<")";}
template<class T> ostream& operator<<(ostream& out,vector<T> &v)                {out<<"[";for(auto it=v.begin();it!=v.end();++it){if(it!=v.begin())out<<", ";out<<*it;}return out<<"]";}
template<class T> ostream& operator<<(ostream& out,deque<T> &v)                 {out<<"[";for(auto it=v.begin();it!=v.end();++it){if(it!=v.begin())out<<", ";out<<*it;}return out<<"]";}
template<class T> ostream& operator<<(ostream& out,set<T> &s)                   {out<<"{";for(auto it=s.begin();it!=s.end();++it){if(it!=s.begin())out<<", ";out<<*it;}return out<<"}";}
template<class T> ostream& operator<<(ostream& out,ordered_set<T> &s)           {out<<"{";for(auto it=s.begin();it!=s.end();++it){if(it!=s.begin())out<<", ";out<<*it;}return out<<"}";}
template<class L,class R> ostream& operator<<(ostream& out,map<L,R> &m)         {out<<"{";for(auto it=m.begin();it!=m.end();++it){if(it!=m.begin())out<<", ";out<<*it;}return out<<"}";}

void dbg_out() {cerr<<"]\n";}
template<typename Head,typename... Tail> 
void dbg_out(Head H,Tail... T) {cerr<<H;if(sizeof...(Tail))cerr<<", ";dbg_out(T...);}
#ifdef LOCAL
#define dbg(...) cerr<<"["<<#__VA_ARGS__<<"] = [",dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

//---------------------------------mars4---------------------------------

vector<vector<ll>> cnt;
vector<ll> dp1;
vector<ll> dp2;

void calc(ll l,ll r,ll optL,ll optR)
{
	if(l>r)
	{
		return;
	}
	ll mid=(l+r)>>1;
	pair<ll,ll> best={-1,-1};
	forn(i,optL,min(mid,optR)+1)
	{
		ll val=(i?dp1[i-1]+cnt[i-1][mid]:0);
		if(val>best.ff)
		{
			best={val,i};
		}
	}
	dp2[mid]=best.ff;
	ll opt=best.ss;
	calc(l,mid-1,optL,opt);
	calc(mid+1,r,opt,optR);
}

int main()
{
	fastio();
	ll z,n,m,t,k,i,j,l,d,h,r;
	cin>>n>>m;
	vector<string> a(n);
	dp1=vector<ll>(m);
	dp2=vector<ll>(m);
	cnt=vector<vector<ll>>(m,vector<ll>(m));
	for(auto &i:a)
	{
		cin>>i;
	}
	vector<ll> dx={1,0,0,-1};
	vector<ll> dy={0,1,-1,0};
	vector<ll> val(n*m);
	vector<vector<ll>> mark(n,vector<ll>(m,-1));
	ll id=0;
	forn(i,0,n)
	{
		forn(j,0,m)
		{
			if(a[i][j]!='.' and mark[i][j]==-1)
			{
				queue<pair<ll,ll>> q;
				q.push({i,j});
				mark[i][j]=id;
				while(!q.empty())
				{
					auto [r,c]=q.front();
					q.pop();
					val[id]+=(a[r][c]-'0');
					forn(k,0,4)
					{
						ll nr=r+dx[k];
						ll nc=c+dy[k];
						if(nr>=0 and nr<n and nc>=0 and nc<m and a[nr][nc]!='.' and mark[nr][nc]==-1)
						{
							q.push({nr,nc});
							mark[nr][nc]=id;
						}
					}
				}
				id++;
			}
		}
	}
	forn(i2,0,m)
	{
		set<ll> s;
		forn(j,0,n)
		{
			if(mark[j][i2]!=-1)
			{
				s.insert(mark[j][i2]);
			}
		}
		for(ll i:s)
		{
			cnt[i2][i2]+=val[i];
		}
		forn(i1,0,i2)
		{
			cnt[i1][i2]=cnt[i2][i2];
			set<ll> s1;
			forn(j,0,n)
			{
				if(mark[j][i1]!=-1)
				{
					s1.insert(mark[j][i1]);
				}
			}
			for(ll i:s1)
			{
				if(s.count(i))
				{
					cnt[i1][i2]-=val[i];
				}
			}
		}
	}
	forn(i,0,m)
	{
		dp1[i]=cnt[i][i];
	}
	vector<ll> ans;
	ans.push_back(*max_element(all(dp1)));
	forn(i,1,m)
	{
		calc(0,m-1,0,m-1);
		dp1.swap(dp2);
		ans.push_back(*max_element(all(dp1)));
	}
	for(ll i:ans)
	{
		cout<<i<<"\n";
	}
	cerr<<"\nTime elapsed: "<<1000*clock()/CLOCKS_PER_SEC<<"ms\n";
	return 0;
}

Compilation message

nafta.cpp: In function 'int main()':
nafta.cpp:75:5: warning: unused variable 'z' [-Wunused-variable]
   75 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |     ^
nafta.cpp:75:11: warning: unused variable 't' [-Wunused-variable]
   75 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |           ^
nafta.cpp:75:13: warning: unused variable 'k' [-Wunused-variable]
   75 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |             ^
nafta.cpp:75:15: warning: unused variable 'i' [-Wunused-variable]
   75 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |               ^
nafta.cpp:75:17: warning: unused variable 'j' [-Wunused-variable]
   75 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                 ^
nafta.cpp:75:19: warning: unused variable 'l' [-Wunused-variable]
   75 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                   ^
nafta.cpp:75:21: warning: unused variable 'd' [-Wunused-variable]
   75 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                     ^
nafta.cpp:75:23: warning: unused variable 'h' [-Wunused-variable]
   75 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                       ^
nafta.cpp:75:25: warning: unused variable 'r' [-Wunused-variable]
   75 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                         ^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 340 KB Output is correct
2 Correct 2 ms 340 KB Output is correct
3 Correct 2 ms 320 KB Output is correct
4 Correct 2 ms 340 KB Output is correct
5 Correct 3 ms 320 KB Output is correct
6 Correct 3 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 340 KB Output is correct
2 Correct 2 ms 340 KB Output is correct
3 Correct 2 ms 320 KB Output is correct
4 Correct 2 ms 340 KB Output is correct
5 Correct 3 ms 320 KB Output is correct
6 Correct 3 ms 340 KB Output is correct
7 Correct 474 ms 2656 KB Output is correct
8 Correct 495 ms 2664 KB Output is correct
9 Correct 163 ms 2656 KB Output is correct
10 Correct 434 ms 2672 KB Output is correct
11 Correct 492 ms 2668 KB Output is correct
12 Correct 458 ms 2660 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 340 KB Output is correct
2 Correct 2 ms 340 KB Output is correct
3 Correct 2 ms 320 KB Output is correct
4 Correct 2 ms 340 KB Output is correct
5 Correct 3 ms 320 KB Output is correct
6 Correct 3 ms 340 KB Output is correct
7 Correct 474 ms 2656 KB Output is correct
8 Correct 495 ms 2664 KB Output is correct
9 Correct 163 ms 2656 KB Output is correct
10 Correct 434 ms 2672 KB Output is correct
11 Correct 492 ms 2668 KB Output is correct
12 Correct 458 ms 2660 KB Output is correct
13 Execution timed out 1104 ms 102680 KB Time limit exceeded
14 Halted 0 ms 0 KB -