巢穴

about:blank

#

P2996

模拟..wa了一次..因为用文件做的..忘了去掉文件了..
而且一开始看错了题...
导致最后改的时候代码乱七八糟的..orz..
#include <iostream>
using namespace std;
char pie_1[6]={'K','Q','R','B','N','P'};
char pie_2[15]={'k','q','r','b','n','p'};


bool hash[18][34];
char ch[18][34];
int main()
{
 
for (int i=1;i<=17;i++)
  
for (int j=1;j<=33;j++)
      cin
>>ch[i][j];
 cout
<<"White: ";
 
//find White piece
 bool first=false;
 memset(hash,
0,sizeof(hash));
 
for (int k=0;k<6;)
 
{
  
bool is=false;
  
for (int i=17;i>=1&&(!is);i--)
  
{
   
for (int j=1;j<=33&&(!is);j++)
   
{
      
if (hash[i][j]) continue;
      
if (ch[i][j]==pie_1[k])
      
{
       hash[i][j]
=true;
       
is=true;
       
if (!first) 
          
{cout<<pie_1[k]<<(char)(j/4+1+96)<<8-i/2+1;first=true;}
       
else
       
{
        
if (k>4) cout<<","<<(char)(j/4+1+96)<<8-i/2+1;
        
else
            cout
<<","<<pie_1[k]<<(char)(j/4+1+96)<<8-i/2+1;
       }

      }

   }

  }

  
if (!is) k++;
 }
  
 cout
<<endl;
 first
=false;
 cout
<<"Black: ";
  memset(hash,
0,sizeof(hash));
 
for (int k=0;k<6;)
 
{
  
bool is=false;
  
for (int i=1;i<=17&&(!is);i++)
  
{
   
for (int j=1;j<=33&&(!is);j++)
   
{
      
if (hash[i][j]) continue;
      
if (ch[i][j]==pie_2[k])
      
{
       hash[i][j]
=true;
       
is=true;
       
if (k==0
         
{ cout<<pie_1[k]<<(char)(j/4+1+96)<<8-i/2+1;first=true;}
       
else
       
{
        
if (k>4) cout<<","<<(char)(j/4+1+96)<<8-i/2+1;
        
else
            cout
<<","<<pie_1[k]<<(char)(j/4+1+96)<<8-i/2+1;
       }

      }

   }

  }

  
if (!is) k++;
 }
  
 cout
<<endl;

  
return  0;
}

posted @ 2009-10-04 14:32 Vincent 阅读(95) | 评论 (0)编辑 收藏

P1573

   我绝望.我检讨..模拟..
   一直pe..提交若干次后才发现是格式里多了个空格.
   以后这个pe我是记住了..
  
#include <iostream>
using namespace std;

int n,m,x,y,u;
char ch[11][11];
bool hash[11][11];
int st[11][11];
void dfs(int x,int y,int step)
{
 st[x][y]
=step;
 hash[x][y]
=true;
 
switch(ch[x][y])
 
{
  
case 'N':x--;break;
  
case 'E':y++;break;
  
case 'W':y--;break;
  
case 'S':x++;break;
  
default:break;
 }

 
if (x<1||y<1||x>n||y>m)
 
{
  cout
<<step<<" step(s) to exit"<<endl;
  
return;
 }

 
if (hash[x][y])
 
{
  cout
<<st[x][y]-1<<" step(s) before a loop of "<<step-st[x][y]+1<<" step(s)"<<endl;
  
return;
 }

 dfs(x,y,step
+1);
}

int main()
{
    
while(1)
    
{
     cin
>>n>>m>>u;
     
if (n==0&&m==0&&u==0break;
     
for (int i=1;i<=n;i++)
         
for (int j=1;j<=m;j++)
         
{
             cin
>>ch[i][j];
             hash[i][j]
=false;
         }

    
// memset(hash,0,sizeof(hash));
     dfs(1,u,1);
    }

    
    
return 0;
}

posted @ 2009-10-03 17:37 Vincent 阅读(123) | 评论 (0)编辑 收藏

P2632

   模拟
   写晕了.主要是开始没仔细看题..把方向什么的都搞错了...
   不管怎么说..总算调试出来了..1ac
#include <iostream>
#include 
<string>
using namespace std;

int casek;
char errorStr[500];
int error1,error2;
int main()
{
 cin
>>casek;
 
while(casek--)
 
{
  
int a,b;
  
int n,m;
  cin
>>a>>b;
  cin
>>n>>m;
  
int x[101],y[101];
  
char f[101];
  
for (int i=1;i<=n;i++)
  
{
      cin
>>x[i]>>y[i]>>f[i];
  }

  
bool crash=false;
  
for (int i=1;i<=m;i++)
  
{
      
int u,step;
      
char ch;
      cin
>>u>>ch>>step;
      
if (crash) continue;
      
switch(ch)
      
{
       
case 'L':
                
for (int j=1;j<=step;j++)
                
{
                 
switch(f[u])
                 
{
                  
case 'W':f[u]='S';break;
                  
case 'S':f[u]='E';break;
                  
case 'E':f[u]='N';break;
                  
case 'N':f[u]='W';break;
                  
default:break;
                 }

                }
    
                
break;
       
case 'R':
                
for (int j=1;j<=step;j++)
                
{
                 
switch(f[u])
                 
{
                  
case 'W':f[u]='N';break;
                  
case 'N':f[u]='E';break;
                  
case 'E':f[u]='S';break;
                  
case 'S':f[u]='W';break;
                  
default:break;
                 }

                }

                
break;
       
case 'F':
                
int xx=x[u],yy=y[u];
                
for (int j=1;j<=step;j++)
                
{
                 
switch(f[u])
                 
{
                  
case 'W':xx--;break;
                  
case 'N':yy++;break;
                  
case 'E':xx++;break;
                  
case 'S':yy--;break;
                  
default:break;
                 }

                 
if (xx<1||yy<1||xx>a||yy>b) {cout<<"Robot "<<u<<" crashes into the wall"<<endl;crash=true;break;}
                 
for (int k=1;k<=n;k++)
                 
{
                  
if (k==u) continue;
                  
if (xx==x[k]&&yy==y[k]) {cout<<"Robot "<<u<<" crashes into robot "<<k<<endl;crash=true;break;}
                 }

                 
if (crash) break;
                }

               
// cout<<xx<<" "<<yy<<" "<<u<<endl;
                x[u]=xx;
                y[u]
=yy;
                
break;
       
      }

  }

  
if (!crash)
  
{
   cout
<<"OK"<<endl;
  }

 }

    
 
 
return 0;
}

posted @ 2009-10-03 16:46 Vincent 阅读(87) | 评论 (0)编辑 收藏

P1068

   模拟
   根据第一数列推出括号序列
   然后根据序列得出第二个数列
   
#include <iostream>
using namespace std;

const int MAXN=21;
int p[MAXN],w[MAXN];
char ch[MAXN*2];
int t;
int main()
{
    cin
>>t;
    
while(t--)
    
{
     
int n;
     cin
>>n;
     
for (int i=1;i<=n;++i)
         cin
>>p[i];
     
int top=0;
     
for (int i=1;i<=p[1];++i)
          ch[
++top]='(';
     ch[
++top]=')';
     
for (int i=2;i<=n;++i)
     
{
         
if (p[i]>p[i-1])
            
{
             
for (int j=1;j<=p[i]-p[i-1];++j)  
                 ch[
++top]='(';
             ch[
++top]=')';
            }

            
else
                ch[
++top]=')';
     }
   
     
     top
=0;
     
int count;
     
for (int i=1;i<=2*n;i++)
     
{
   
//   cout<<ch[i];
      if (ch[i]=='('continue;
      top
++;
      count
=0;
      
int tmp=0;
      
      
for (int j=i-1;j>=1;--j)
      
{
       
if (ch[j]=='(')
       
{
        
if (tmp==0)
        
{
         w[top]
=count+1;
         
break;
        }

        
else
        
{
         tmp
--;
        }

       }

       
else
       
{
        tmp
++;
        count
++;
       }

      }

     }

     
for (int i=1;i<=n;i++)
         cout
<<w[i]<<" ";
     cout
<<endl;
   
//  system("pause");
    }

    
return 0;
}


posted @ 2009-10-03 15:28 Vincent 阅读(95) | 评论 (0)编辑 收藏

P3295

C++ WA..G++ AC..奇妙
#include <iostream>
#include 
<string>
using namespace std;

int p,q,r,s,t,v;
string str,st;
int review()
{
    v
++;
    
int rr;
    
switch(st[v])
    

      
case 'A':rr=review()|review();break;
      
case 'K':rr=review()&review();break;
      
case 'N':rr=1-review();break;
      
case 'C':rr=(1-review())|review();break;
      
case 'E':rr=1-(review()^review());break;
      
case 'p':rr=p;break;
      
case 'q':rr=q;break;
      
case 'r':rr=r;break;
      
case 's':rr=s;break;
      
case 't':rr=t;break;
      
default:break;
    }

    
return rr;
}

int main()
{
    
while(1)
    
{
     cin
>>str;
     
if (str=="0"break;
     
bool equal=true;
     
for (p=0;p<=1&&equal;++p)
      
for (q=0;q<=1&&equal;++q)
       
for (r=0;r<=1&&equal;++r)
        
for (s=0;s<=1&&equal;++s)
         
for (t=0;t<=1&&equal;++t)
         
{
          st
=str;
          v
=-1;
          
if (review()==0)
          
{
           equal
=false;
           cout
<<"not"<<endl;
          }

         }

     
if (equal) cout<<"tautology"<<endl;
    }

       
    
return 0;
}

posted @ 2009-10-02 23:26 Vincent 阅读(90) | 评论 (0)编辑 收藏

P2586

还是贪心..
枚举5个月所有的可能..

#include <iostream>
using namespace std;

long s,d;
int main()
{
    
    
long ans;
    
while(cin>>s>>d)
    
{
     
     
if (s*4-d<0)
     
{
      ans
=s*8-2*d+2*s;
     }

     
else
     
{
         
if (s*3-2*d<0)
         
{
          ans
=s*6-4*d+2*s;
         }

         
else
         
{
          
if (s*2-3*d<0)
          
{
           ans
=s*4-6*d+2*s;
          }

          
else
          
{
              
if (s-4*d<0)
              
{
               ans
=s*2-8*d+s-d;
              }

              
else
              
{
               ans
=-12*d;
              }
           
          }

         }

         
     }

     
if (ans<=0) cout<<"Deficit"<<endl;
     
else
         cout
<<ans<<endl;
    }

    
return 0;
}

posted @ 2009-10-02 22:48 Vincent 阅读(74) | 评论 (0)编辑 收藏

P2109

   我是拿着一个题目表在切poj..不知道为何这题被分到了贪心里..实在很orz
   1ac..久违了
   
#include <iostream>
#include 
<math.h>
using namespace std;

int main()
{
    
double p,k;
    
while (cin>>p>>k)
    
{
          
double answer=pow(k,(1/p));
          cout
<<answer<<endl;
    }

    
return 0;
}

posted @ 2009-10-02 12:47 Vincent 阅读(103) | 评论 (0)编辑 收藏

P1328

   贪心
   求出每个岛屿被雷达覆盖,雷达位置的最左点和最右点
   按左值排序
   从左向右依次扫描
   把雷达的位置放在最右点,如果某岛屿不在范围,就添加雷达
  
#include <iostream>
#include 
<math.h>
using namespace std;

const int MAXN=1001;
int n,d;
int sum;
double lefts[MAXN],rights[MAXN];
void qsort(int l,int r)
{
 
int ll=l,rr=r;
 
double mid=lefts[(l+r)/2];
 
while (ll<=rr)
 
{
       
while (lefts[ll]<mid) ll++;
       
while (lefts[rr]>mid) rr--;
       
if (ll<=rr)
       
{
        swap(lefts[ll],lefts[rr]);
        swap(rights[ll],rights[rr]);
        ll
++;
        rr
--;
       }

 }

 
if (ll<r) qsort(ll,r);
 
if (rr>l) qsort(l,rr);
}

void solve()
{
     
double std;
     qsort(
1,n);
     sum
=1;
     std
=rights[1];
     
for (int i=2;i<=n;i++)
     
{
         
if (lefts[i]>std)
         
{
          std
=rights[i];
          sum
++;
         }

         
else
         
{
             
if (rights[i]<std)
             
{
              std
=rights[i];
             }

         }

     }

}

int main()
{
    
int t=1;
    
while(1)
    
{
     cin
>>n>>d;
     
if (n==0&&d==0break;
     
int fail=0;
     
for (int i=1;i<=n;i++)
     
{
         
int x,y;
         cin
>>x>>y;
         
if (y>d)
         
{
                 fail
=1;
         }

         
else
         
{
             
double l=sqrt((double)(d*d-y*y));
             lefts[i]
=x-l;
             rights[i]
=x+l;
         }

     }

     
if (fail)
     
{
      cout
<<"Case "<<t++<<""<<-1<<endl;
     }

     
else
     
{
      solve();
      cout
<<"Case "<<t++<<""<<sum<<endl;
     }

    }

    
    
return 0;
}


posted @ 2009-10-02 12:38 Vincent 阅读(160) | 评论 (0)编辑 收藏

P2965

   位运算+bfs
   本来用iterator来做队列的指针,但是莫名其妙的错误..
   于是用了int来做指针..安心啊.
  
#include <iostream>
#include 
<vector>
using namespace std;
bool hash[65536];

vector
<int> answer;
int fstate[16]={
0xF888,0xF444,0xF222,0xF111,
0x8F88,0x4F44,0x2F22,0x1F11,
0x88F8,0x44F4,0x22F2,0x11F1,
0x888F,0x444F,0x222F,0x111F}
;



struct state
{
 
int value;
 
int change;
 
int father;
 
}
;

vector
<state> list;
void jude(int v)
{
     
if (v==0)
     
{
      
int iter=list.size()-1;
      
      
while(iter!=0)
      
{
          answer.push_back(list.at(iter).change);
          iter
=list.at(iter).father;
      }

      cout
<<answer.size()<<endl;
      
for (int i=answer.size()-1;i>=0;--i)
      
{
          cout
<<answer.at(i)/4+1<<" "<<answer.at(i)%4+1<<endl;
      }

      
int cc;cin>>cc;
      exit(
0);
     }

}

void init()
{
     
int x=0,u=1;
     
for (int i=0;i<4;i++)
         
for (int j=0;j<4;j++)
         
{
             
char ch;
             cin
>>ch;
             
int k;
             
switch(ch)
             
{
               
case '-':k=0;break;
               
case '+':k=1;break;
               
default:break;
             }

             x
=x*2+k;
         }

    

     hash[x]
=true;
     state st;
     st.value
=x;
     st.change
=-1;
     st.father
=0;
     list.push_back(st);
    
     jude(x);
     
}

void bfs()
{
     vector
<state>::iterator iter=list.begin();
     
int left=0;
      
     
     
while (left<list.size())
     
{
           state st
=list.at(left);
           
int value=st.value;

           
for (int i=0;i<16;i++)
           
{
               
            
int n=fstate[i]^value;
            
            
if (hash[n]) continue;

            state sta;
            sta.value
=n;
            sta.father
=left;
            sta.change
=i;
            hash[n]
=true;
            list.push_back(sta);
            jude(n);
           }

           left
++;
           
     }

}

int main()
{
    init();
    bfs();
    
return 0;
}

posted @ 2009-10-01 16:13 Vincent 阅读(124) | 评论 (0)编辑 收藏

P1753

  -_-||| 
  一直runtime error
   然后再poj上找到了数据
   测试数据正确
   于是怀疑是我用<map>的问题,疑惑不解中
#include <iostream>
#include 
<string>
#include 
<map>
#include 
<queue>
using namespace std;

queue
<string> list; 
queue
<int> list_t;
map
<string,int> hash;

void init()
{
     
     
string str="";
     
for (int i=0;i<4;i++)
     
{
         
for (int j=0;j<4;j++)
         
{
             
char ch;
             cin
>>ch;
             
//ch=getchar();
             str+=ch;
         }

         getchar();
     }


     
if (str=="bbbbbbbbbbbbbbbb"||str=="wwwwwwwwwwwwwwww")
     
{
            cout
<<0<<endl;
            exit(
0);
     }
 
     list.push(str);
     list_t.push(
0);
     hash.insert(map
<string,int>::value_type(str,0));
}

void turn(char &ch)
{
     
if (ch=='w') ch='b';
     
else ch='w';
}

void bfs()
{
     
while (!list.empty())
     
{
      
string str=list.front();

      
int ti=list_t.front();
      list.pop();
      list_t.pop();
      
for (int i=0;i<16;i++)
      
{
          
string s=str;

          
int x;
          
//up
          turn(s[i]);
          x
=i-4;
          
if (i>=0) turn(s[x]);
          
//down
          x=i+4;
          
if (i<16) turn(s[x]);
          
//left
          if (i%4!=0{x=i-1;turn(s[x]);}
          
//right
          if (i%4!=3{x=i+1;turn(s[x]);}
          
          map
<string,int>::iterator iter=hash.find(s);
          
if (iter==hash.end())
          
{
           list.push(s);
           list_t.push(ti
+1);


           
if (s=="bbbbbbbbbbbbbbbb"||s=="wwwwwwwwwwwwwwww")
           
{
            cout
<<ti+1<<endl;
            exit(
0);
            
           }
 
           hash.insert(map
<string,int>::value_type(s,ti+1));
          }

        
      }

     }

     cout
<<"Impossible"<<endl;
}


int main()
{
    init();
    bfs();
    
return 0;
}

posted @ 2009-10-01 14:32 Vincent 阅读(236) | 评论 (0)编辑 收藏

仅列出标题
共8页: 1 2 3 4 5 6 7 8