Cod sursa(job #949402)

Utilizator predatorGigi Valoare predator Data 13 mai 2013 17:56:00
Problema Mins Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream>
using namespace std;
ifstream f("origami.in");
ofstream g("origami.out");
int n,m,ma,i,j,h,k,u,a,b,v[400][400],t;
void flip1(),flip2(),add1(),add2();
int main ()
{
	f>>n>>u;
	m=n;
	h=1;
	for(i=1;i<=n;++i)
		for(j=1;j<=m;++j)
			v[i][j]=1;
	while(u--)
	{
		f>>a>>b;
		if(a==1)
		{
			flip1();
			add1();
			if(b<=m/2)
				m-=b;
			else
				m=b;
		}
		else
		{
			flip2();
			add2();
			if(b<=n/2)
				n-=b;
			else
				n=b;
		}
	}
	for(i=1;i<=n;++i)
		for(j=1;j<=m;++j)
			if(v[i][j]>ma)
				ma=v[i][j];
	g<<n<<" "<<m<<" "<<ma;
	return 0;
}
void flip1()
{
	for(i=1;i<=n;++i)
		for(j=1;j<=b/2;++j)
			swap(v[i][j],v[i][b-j+1]);
}
void add1()
{
	for(i=1;i<=n;++i)
		for(j=1;j<=b;++j)
			v[i][j]+=v[i][b+j];
	for(i=1;i<=n;++i)
		for(j=b+1;j<=b;++j)
			v[i][j]=v[i][b+j];
}
void flip2()
{
	for(i=1;i<=b/2;++i)
		for(j=1;j<=m;++j)
			swap(v[i][j],v[b-i+1][j]);
}
void add2()
{
	for(i=1;i<=b;++i)
		for(j=1;j<=m;++j)
			v[i][j]+=v[i+b][j];
	for(i=b+1;i<=n;++i)
		for(j=1;j<=m;++j)
			v[i][j]=v[i+b][j];
}