USACO Solution Code(5):Name That number, Palindromic Squares and Dual Palindromes

都是比較簡單的幾道題,就不多廢話了,直接上代碼。

 

#include <iostream>

#include <fstream>

#include <string>

#include <vector>

 

using namespace std;

 

ifstream fin("namenum.in");

ofstream fout("namenum.out");

 

//將字母映射到數字,不存在的爲-1

int map[] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,-1,7,7,8,8,8,9,9,9,-1};

 

void solve()

{

   string object;

   in>>object;

   

   int len;

   len = object.size();

 

   fstream dict_in("dict.txt");

   vector<string> dict;

 

   string temp;

 

   while( dict_in>>temp ){

       if(temp.size()==len){

           //只取等於數字串相等的字符串

           dict.push_back(temp);

       }

   }

 

   //sort(dict.begin(),dict.end());

   //dict.txt文件已經排好序,無需排序了.

 

   bool find = false;

   bool has_result = false;

 

   for(int i=0;i<dict.size();++i){

       find = true;

       for(int j=0;j<len;++j){

           if(map[dict[i][j]-'A']!=object[j]-'0'){

               find = false;

               break;

           }

       }

 

       if(find){

           out<<dict[i]<<endl;

           has_result = true;

       }

   }

 

   if(!has_result)

       out<<"NONE"<<endl;

}

 

 

int main()

{

  solve();

  return 0;

}

 

 

/*

ID: fairyroad

PROG: palsquare

LANG: C++

*/

#include<fstream>

#include<deque>

#include<string>

using namespace std;

 

ofstream fout ("palsquare.out");

ifstream fin ("palsquare.in");

 

int B;

string help="ABCDEFGHIJ";

 

inline bool IsPalindrome(const deque<int>& examinee)

{

               int header=0, tail=examinee.size()-1;

               while(header<=tail){

                               if(examinee[header]!=examinee[tail])   return false;

                               ++header; --tail;

               }

               return true;

}

 

inline deque<int> conversion(int source, int k)

{

               deque<int> res;

               while (source){

                               res.push_front(source%k);

                               source/=k;

               }

 

               return res;

}

 

inline void myPrint(const deque<int>& toPrint)

{

               deque<int>::const_iterator pos=toPrint.begin(), tail=toPrint.end();

               bool flag=false;

               for (pos; pos!=tail; ++pos) {

                               flag=(B>9 && *pos>9);

                               if(flag) fout<<help[*pos-10];

                               else fout<<*pos;

               }

}

 

int main()

{

               fin>>B;

               for(int i=1;i<=300;i++)

               {

                               deque<int> res=conversion( i*i, B);

                               if (IsPalindrome(res)){

                                              myPrint(conversion(i,B));  fout<<" ";

                                              myPrint(res);  fout<<endl;

                               }

               }

               return 0;

}

 

 

/*

ID: fairyroad

PROG: dualpal

LANG: C++

*/

 

#include<deque>

#include<fstream>

using namespace std;

 

ofstream fout ("dualpal.out");

ifstream fin ("dualpal.in");

 

inline bool IsPalindrome(const deque<int>& examinee)

{

               int header=0, tail=examinee.size()-1;

               while(header<=tail){

                               if(examinee[header]!=examinee[tail])   return false;

                               ++header; --tail;

               }

               return true;

}

 

inline deque<int> conversion(int source, int k)

{

               deque<int> res;

               while (source){

                               res.push_front(source%k);

                               source/=k;

               }

               return res;

}

 

bool IsDualpal(int source)

{

               int count=0, begin=2;

               while (begin<=10) {

                               if( IsPalindrome(conversion(source,  begin++))) ++count;

                               if(count==2) return true;

               }

               return false;

}

 

int main()

{

               int num , start;

               fin>>num>>start;

 

               int count=0;

               ++start;

               while (count<num)

               {

                               if (IsDualpal(start)){

                                              fout<<start<<endl;

                                              count++;

                               }

                               start++;

               }

               return 0;

}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章