Mai intai trebuie sa te autentifici.
Cod sursa(job #1792140)
| Utilizator | Data | 30 octombrie 2016 01:44:34 | |
|---|---|---|---|
| Problema | Jocul Flip | Scor | 30 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.77 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int x[17][17],smax, stop=0;
int n,m;
long long getsum()
{
long long sa=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
sa += x[i][j]*x[0][j]*x[i][0];
}
}
return sa;
}
void sumv()
{
int pnm=getsum();
if(pnm>smax)
{
smax=pnm;
}
}
void init()
{
for(int a=m;a>=1;a--)
x[a][0]=1;
for(int a=1;a<=n;a++)
x[0][a]=1;
}
int nextp(){
int mademod=0;
long long sa;
for(int i=1;i<=m;i++)
{
sa=0;
for(int j=1;j<=n;j++)
{
sa += x[i][j]*x[0][j]*x[i][0];
}
if(sa<0)
{
mademod=1;
sumv();
x[i][0]*=-1;
sumv();
}
if(sa==0)
{
int x1=getsum();
x[i][0]*=-1;
if(x1>=getsum())x[i][0]*=-1;
else {mademod=1;sumv();}
}
}
for(int j=1;j<=n;j++)
{
sa=0;
for(int i=1;i<=m;i++)
{
sa +=x[i][j]*x[0][j]*x[i][0];
}
if(sa<0)
{
mademod=1;
sumv();
x[0][j]*=-1;
sumv();
}
if(sa==0)
{
mademod=1;
int x1=getsum();
x[0][j]*=-1;
if(x1>=getsum())x[0][j]*=-1;
else {mademod=1;sumv();}
}
}
return mademod;
}
int main()
{
f>>m>>n;
init();
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
f>>x[i][j];
}
}
while(nextp())
{
}
g<<smax;
}
