1. 程式人生 > >P1603 斯諾登的密碼-字符串加法的妙用

P1603 斯諾登的密碼-字符串加法的妙用

tin href out int stream urn ace break main

傳送門:https://www.luogu.org/problemnew/show/P1603

題意:

首先在給定的字符串中,找出特定的單詞,把它轉化成特定的數字,

然後在這些數字中,找出排列結果最小的一種排列;

思路:

第一步就是打表就ok,第二步,可以用字符串加法結果的大小進行排序;

遇到“找出所有排列方法中最小的一個數”,可能就要怎麽做;

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#define
pb push_back using namespace std; typedef long long ll; vector<string>q; bool cmp (string a,string b) { return a+b < b+a; } int main(){ string s; while(cin>>s) { if(s=="one"||s=="a"||s=="another"||s=="first")q.pb("01"); if(s=="two"||s=="both"||s=="second
")q.pb("04"); if(s=="three"||s=="third")q.pb("09"); if(s=="four")q.pb("16"); if(s=="five")q.pb("25"); if(s=="six")q.pb("36"); if(s=="seven")q.pb("49"); if(s=="eight")q.pb("64"); if(s=="nine")q.pb("81"); if(s=="ten")q.pb("00"); if(s=="
eleven")q.pb("21"); if(s=="twelve")q.pb("44"); if(s=="thirteen")q.pb("69"); if(s=="fourteen")q.pb("96"); if(s=="fifteen")q.pb("25"); if(s=="sixteen")q.pb("56"); if(s=="seventeen")q.pb("89"); if(s=="eighteen")q.pb("24"); if(s=="nineteen")q.pb("61"); if(s=="twenty")q.pb("00"); //break; if(s[s.length()-1]==.)break; } sort(q.begin(),q.end(),cmp); bool isout=false; bool canout=false; string a=""; for(int i=0;i<q.size();i++) a+=q[i]; for(int i=0;i<a.length();i++) { if(a[i]!=0) canout=true; if(a[i]==0&&!canout)continue; cout<<a[i]; isout=true; } if(!isout)cout<<"0"; cout<<endl; return 0; }

P1603 斯諾登的密碼-字符串加法的妙用