USACO-Section1.3 Name That Number (遍历与字符串比较)
生活随笔
收集整理的這篇文章主要介紹了
USACO-Section1.3 Name That Number (遍历与字符串比较)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2017-5-26
題目描述
大概就是將字符組合,判斷它是否在給定的文件中解答
這道題字符組合我用的是深度搜索,我在查找時只打開了一次文件, 每次繼續上次的查找位置查找,因為我們求出來的字符組合本身就是有序的。 需要注意的是得回去一行。代碼
/* ID: 18795871 PROG: namenum LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> #include<cstdio> using namespace std;ifstream fin1("dict.txt"); ifstream fin("namenum.in"); ofstream fout("namenum.out");const int N = 12; char x[8][4]={"ABC","DEF","GHI","JKL","MNO","PRS","TUV","WXY"}; char s[N+1],r[N+1],str2[N+1]="\0"; int l,flag=0; int b=0;bool res(){char str1[N+1];if (strcmp(str2,r)==0) return true;if (strcmp(str2,r)>0) return false;while (!fin1.eof()){fin1>>str1;strcpy(str2,str1);b++;if (strcmp(r,str1)==0) return true;if (strcmp(str1,r)>0) return false;} }void dfs(int step){if (step==l){r[l]='\0';if (res()){flag=1;fout<<r<<endl;}return ;}for (int i=0;i<3;i++){r[step]=x[s[step]-'0'-2][i];dfs(step+1);} }int main() {char c;l=0;while(fin>>c){if (c=='\n') break;s[l++]=c;}dfs(0);if (!flag) fout<<"NONE"<<endl;return 0; }需要注意的幾點:
(1)讀取dict.txt如果定義全局的,那么每次是從上一次結束的地方繼續讀取的,如果是在函數里,那么每次都是從頭開始讀取的。
(2)如果每次從頭開始讀取,是會造成超時的。
(3)如果每次都從之前的地方繼續讀取的話,可能會存在讀取的比判斷的快,此時我們需要記住上一次讀取的字符串tmp,如果它的字典序大于要判斷的那個字符串的話,那么我們就不要進入循環進行讀取了。
總結
以上是生活随笔為你收集整理的USACO-Section1.3 Name That Number (遍历与字符串比较)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python爬虫之puppeteer搭建
- 下一篇: bzoj 1116