Cod sursa(job #2292772)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 29 noiembrie 2018 22:54:42
Problema 1-sir Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <bits/stdc++.h>

using namespace std;

int n,s,SDP[260][2],DP[260][2],C[260][2];

int main(){
	cin>>n>>s;
	DP[0][0]=DP[0][1]=SDP[0][0]=SDP[0][1]=0;
	C[0][0]=C[0][1]=1;
	for(int i=1;i<n;i++){
		int ind;
		if(abs(s-(SDP[i-1][0]+DP[i-1][0]-1))<abs(s-(SDP[i-1][1]+DP[i-1][1]-1)))ind=0;
		else if(abs(s-(SDP[i-1][0]+DP[i-1][0]-1))>abs(s-(SDP[i-1][1]+DP[i-1][1]-1)))ind=1;
		else ind=2;
		DP[i][1]=DP[i-1][(bool)ind]-1;
		SDP[i][1]=SDP[i-1][(bool)ind]+DP[i][1];
		if(ind==2 && i>1){
			C[i][1]=C[i-1][0]+C[i-1][1];
		}else C[i][1]=C[i-1][(bool)ind];
		if(abs(s-(SDP[i-1][0]+DP[i-1][0]+1))<abs(s-(SDP[i-1][1]+DP[i-1][1]+1)))ind=0;
		else if(abs(s-(SDP[i-1][0]+DP[i-1][0]+1))>abs(s-(SDP[i-1][1]+DP[i-1][1]+1)))ind=1;
		else ind=2;
		DP[i][0]=DP[i-1][(bool)ind]+1;
		SDP[i][0]=SDP[i-1][(bool)ind]+DP[i][0];
		if(ind==2 && i>1){
			C[i][0]=C[i-1][0]+C[i-1][1];
		}else C[i][0]=C[i-1][(bool)ind];
	}
	/*cout<<"DP:\n";
	for(int i=0;i<n;i++){
		cout<<DP[i][0]<<' ';
	}
	cout<<'\n';
	for(int i=0;i<n;i++){
		cout<<DP[i][1]<<' ';
	}
	cout<<"\nC:\n";
	for(int i=0;i<n;i++){
		cout<<C[i][0]<<' ';
	}
	cout<<'\n';
	for(int i=0;i<n;i++){
		cout<<C[i][1]<<' ';
	}
	cout<<"\nSDP:\n";
	for(int i=0;i<n;i++){
		cout<<SDP[i][0]<<' ';
	}
	cout<<'\n';
	for(int i=0;i<n;i++){
		cout<<SDP[i][1]<<' ';
	}
	cout<<'\n';
	cout<<'\n';*/
	if(SDP[n-1][0]==s)cout<<C[n-1][0]<<'\n';
	else if(SDP[n-1][1]==s) cout<<C[n-1][1]<<'\n';
	return 0;
}