poj 1222 高斯消元
2015-07-03 16:52
525 查看
第一次写高斯消元 -。-
题意很简单 就是是全部灯变暗,一盏灯开关会使周围的灯变化,初始状态给了。
每盏灯就是一个x ,A就是相关关系
就是求 Ax=B 的解
(自己写的模版有点搓,可以去别的文章去看看 优美点的)#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
#define MAXA 25005
#define MAXN 50005
#define LL long long
#define MOD 10000000000
int a[33][33];
int b[33][33];
int ans[33];
int mp[10][10];
int id[33];
int x[33];
int dx[]={0,-1,0,1,0};
int dy[]={1,0,-1,0,0};
void init()
{
int tmp=0;
memset(a,0,sizeof(a));
for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
mp[i][j]=tmp++;
}
}
memset(a,0,sizeof(a));
for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
for(int k=0;k<5;k++)
{
if(i+dx[k]<0||i+dx[k]>4||j+dy[k]<0||j+dy[k]>5)continue;
int nto=mp[i][j];
int to=mp[i+dx[k]][j+dy[k]];
a[nto][to]=1;
a[to][nto]=1;
}
}
}
}
int main()
{
int t,cas=1;
scanf("%d",&t);
init();
while(t--)
{
int tmp=0;
for(int i=0;i<30;i++)
{
id[i]=i;
for(int j=0;j<30;j++)
{
b[i][j]=a[i][j];
// printf("%d ",b[i][j]);
}
// printf("\n");
}
for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
scanf("%d",&b[tmp++][30]);
}
}
for(int i=0;i<30;i++)
{
for(int j=i;j<30;j++)
{
if(b[j][i]!=0)
{
swap(b[j],b[i]);
// swap(id[i],id[j]);
break;
}
}
if(b[i][i]==0)continue;
for(int j=i+1;j<30;j++)
{
if(b[j][i]==0)continue;
for(int k=i;k<=30;k++)
{
b[j][k]=((b[j][k]-b[i][k])%2+2)%2;
}
}
}
for(int i=29;i>=0;i--)
{
int sum=0;
for(int j=i+1;j<30;j++)
{
sum=sum+ans[j]*b[i][j];
}
ans[i]=((b[i][30]-sum)%2+2)%2;
}
printf("PUZZLE #%d\n",cas++);
for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
printf("%d ",ans[mp[i][j]]);
}
printf("\n");
}
}
return 0;
}
题意很简单 就是是全部灯变暗,一盏灯开关会使周围的灯变化,初始状态给了。
每盏灯就是一个x ,A就是相关关系
就是求 Ax=B 的解
(自己写的模版有点搓,可以去别的文章去看看 优美点的)#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
#define MAXA 25005
#define MAXN 50005
#define LL long long
#define MOD 10000000000
int a[33][33];
int b[33][33];
int ans[33];
int mp[10][10];
int id[33];
int x[33];
int dx[]={0,-1,0,1,0};
int dy[]={1,0,-1,0,0};
void init()
{
int tmp=0;
memset(a,0,sizeof(a));
for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
mp[i][j]=tmp++;
}
}
memset(a,0,sizeof(a));
for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
for(int k=0;k<5;k++)
{
if(i+dx[k]<0||i+dx[k]>4||j+dy[k]<0||j+dy[k]>5)continue;
int nto=mp[i][j];
int to=mp[i+dx[k]][j+dy[k]];
a[nto][to]=1;
a[to][nto]=1;
}
}
}
}
int main()
{
int t,cas=1;
scanf("%d",&t);
init();
while(t--)
{
int tmp=0;
for(int i=0;i<30;i++)
{
id[i]=i;
for(int j=0;j<30;j++)
{
b[i][j]=a[i][j];
// printf("%d ",b[i][j]);
}
// printf("\n");
}
for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
scanf("%d",&b[tmp++][30]);
}
}
for(int i=0;i<30;i++)
{
for(int j=i;j<30;j++)
{
if(b[j][i]!=0)
{
swap(b[j],b[i]);
// swap(id[i],id[j]);
break;
}
}
if(b[i][i]==0)continue;
for(int j=i+1;j<30;j++)
{
if(b[j][i]==0)continue;
for(int k=i;k<=30;k++)
{
b[j][k]=((b[j][k]-b[i][k])%2+2)%2;
}
}
}
for(int i=29;i>=0;i--)
{
int sum=0;
for(int j=i+1;j<30;j++)
{
sum=sum+ans[j]*b[i][j];
}
ans[i]=((b[i][30]-sum)%2+2)%2;
}
printf("PUZZLE #%d\n",cas++);
for(int i=0;i<5;i++)
{
for(int j=0;j<6;j++)
{
printf("%d ",ans[mp[i][j]]);
}
printf("\n");
}
}
return 0;
}
相关文章推荐
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列
- POJ-1003 Hangover
- POJ-1004 Financial Management
- 用单调栈解决最大连续矩形面积问题
- 2632 Crashing Robots的解决方法
- 1573 Robot Motion (简单题)
- 【高手回避】poj3268,一道很水的dijkstra算法题
- POJ 1088 滑雪
- poj2387 Til the Cows Come Home—Dijkstra模板
- poj 2485 Highways
- poj 1511 Invitation Cards
- POJ水题1083区间重叠问题
- 【网络流-最大流-Dinic-建模】POJ3281 Dining:Pascal 解法
- poj1042
- poj1080