最近再用ubuntu系统,这是在ubuntu下写的第一个像样的程序,呵呵。 vim编辑器很强大,就是不太会用啊,倒腾了半天终于把配置文件给改了,能自动缩进等等,用起来舒服多了。
poj2965,直接在1753上改写一下就行了。
poj 2965代码:
#include<iostream>
#include<stdio.h>
#include<fstream>
#include<string.h>
#include<time.h>
using namespace std;
int output;
inline void set0(int &data,int index)
{
data&=(~(1<<index));
}
inline void set1(int &data,int index)
{
data|=(1<<index);
}
inline int getbit(const int &data,int index)
{
return data&(1<<index);
}
int data;
void put(char *ch,int index)
{
for(int i=0;i<4;i++,index++)
{
if(ch[i]=='+')
{
set0(data,index);
}
else if(ch[i]=='-')
{
set1(data,index);
}
}
}
int rem[16]={};
//0表示b 1表示w
void solve()
{
const int final=65535;
int change;
int temp=data;
int min=100;
for(change=0;change<65536;change++)
{
//data 根据i的每一位做相应变化
for(int i=0;i<16;i++)
{
if(getbit(change,i)!=0)
{
data=data^rem[i];
}
}
if(data==final)
{
int count=0;//统计change中 “1” 的个数,
for(int i=0;i<16;i++)
{
if(getbit(change,i)!=0)
count++;
}
if(count<min)
{
min=count;
output=change;
}
}
data=temp;
}
if(min==100)
cout<<"Impossible"<<endl;
else
{
cout<<min<<endl;
for(int i=0;i<16;i++)
{
if(getbit(output,i)!=0)
{
cout<<i/4+1<<" "<<i%4+1<<endl;
}
}
}
}
int main( )
{
memset(rem,0,sizeof(int)*16);
for(int i=0;i<16;i++)
{
int row=i/4;
int col=i%4;
for(int k=0;k<4;k++)
{
set1(rem[i],4*row+k);
set1(rem[i],4*k+col);
}
}
ifstream cin("input.txt");
char ch[5];
while(cin>>ch)
{
output=0;
int index=0;
data=0;
put(ch,index);
index+=4;
for(int k=0;k<3;k++)
{
cin>>ch;
put(ch,index);
index+=4;
}
solve();
}
return 0;
}
383

被折叠的 条评论
为什么被折叠?



