답안 #211639

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
211639 2020-03-20T21:18:43 Z tleontest1 Bob (COCI14_bob) C++14
120 / 120
178 ms 35872 KB
#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")

#include <bits/stdc++.h>

using namespace std;

typedef long long lo;
typedef pair< lo,lo > PII;

#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define FOR for(lo i=1;i<=n;i++)
#define mid ((start+end)/2)
#define int long long
#define ort ((bas+son)/2)

const lo MAX = -1000000000000000000;
const lo MIN = 1000000000000000000;
const lo inf = 1000000000;
const lo KOK = 100000;
const lo LOG = 30;
const lo li = 1005;
const lo mod = 1000000007;

int n,m,b[li],a[li][li],k,flag,t,dp[li][li],dp1[li],dp2[li];
int cev;
string s;
stack<PII> st[li];
vector<int> v;

main(void){
	scanf("%lld %lld",&n,&m);
	FOR{
		for(int j=1;j<=m;j++)scanf("%lld",&a[i][j]);
	}
	FOR{
		int esit=1;
		for(int j=1;j<=m;j++){
			if(a[i][j]!=a[i][j-1] && j!=1)esit=1;
			if(a[i][j]==a[i][j-1] && j!=1)esit++;
			//~ cout<<"at"<<dp1[1]<<"at"<<endl;
			int aktar=dp[i-1][j];
			if(a[i][j]!=a[i-1][j] && i!=1){
				aktar=0;
				while(st[j].size())st[j].pop();
			}
			int say=0;
			dp[i][j]=aktar;
			while(st[j].size()){
				if(esit<st[j].top().fi){
					say+=st[j].top().se;
					dp[i][j]-=st[j].top().fi*st[j].top().se;
					dp[i][j]+=esit*st[j].top().se;
					st[j].pop();
				}
				else break;
			}
			st[j].push(mp(esit,++say));
			dp[i][j]+=esit;
			
		}
	}
	FOR{
		for(int j=1;j<=m;j++){
			cev+=dp[i][j];
			//~ cout<<dp[i][j]<<" ";
		}
		//~ cout<<endl;
	}
	printf("%lld\n",cev);
	return 0;
}

Compilation message

bob.cpp:36:10: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main(void){
          ^
bob.cpp: In function 'int main()':
bob.cpp:37:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld %lld",&n,&m);
  ~~~~~^~~~~~~~~~~~~~~~~~~
bob.cpp:39:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   for(int j=1;j<=m;j++)scanf("%lld",&a[i][j]);
                        ~~~~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 1536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 1536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 35 ms 9468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 48 ms 9464 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 9592 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 41 ms 9624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 147 ms 17784 KB Output is correct
2 Correct 134 ms 23108 KB Output is correct
3 Correct 141 ms 35752 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 178 ms 17632 KB Output is correct
2 Correct 118 ms 23288 KB Output is correct
3 Correct 145 ms 35872 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 171 ms 19192 KB Output is correct
2 Correct 130 ms 35704 KB Output is correct
3 Correct 118 ms 35708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 165 ms 17656 KB Output is correct
2 Correct 118 ms 28540 KB Output is correct
3 Correct 132 ms 35740 KB Output is correct