P1603 斯诺登的密码

感觉这道题好毒~~


这道题为了偷懒,L_Y_T决定用map

就是用map来预处理烦人的字符

	data["one"] = 1 , data["two"] = 4 , data["three"] = 9 , data["four"] = 16 ;
	data["five"] = 25 , data["six"] = 36 , data["seven"] = 49 , data["eight"] = 64 ;
	data["nine"] = 81 , data["ten"] = 0 , data["eleven"] = 11*11%100 , data["twelve"] = 12*12%100 ;
	data["thirteen"] = 13*13%100 , data["fourteen"] = 14*14%100 , data["fifteen"] = 15*15%100 ;
	data["sixteen"] = 16*16%100 , data["seventeen"] = 17*17%100 , data["eighteen"] = 18*18%100 ;
	data["nineteen"] = 19*19%100 , data["twenty"] = 0 , data["a"] = 1 , data["both"] = 4 ;
	data["another"] = 4 , data["first"] = 1 , data["second"] = 4 , vis["third"] = 9 ;
	vis["one"] = 1 , vis["two"] = 1 , vis["three"] = 1 , vis["four"] = 1 ;
	vis["five"] = 1 , vis["six"] = 1 , vis["seven"] = 1 , vis["eight"] = 1 ;
	vis["nine"] = 1 , vis["ten"] = 1 , vis["eleven"] = 1 , vis["twelve"] = 1 ;
	vis["thirteen"] = 1 , vis["fourteen"] = 1 , vis["fifteen"] = 1 ;
	vis["sixteen"] = 1 , vis["seventeen"] = 1 , vis["eighteen"] = 1 ;
	vis["nineteen"] = 1 , vis["twenty"] = 1 , vis["a"] = 1 , vis["both"] = 1 ;
	vis["another"] = 1 , vis["first"] = 1 , vis["second"] = 1 , vis["third"] = 1 ;

其中data是来存平方%100后的数值,vis是来处理当前字符串是不是代表数字的字符串

然后就进行处理就行了

下面放代码(详解在代码中)

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <map>
#include <vector>

using namespace std ;
map<string,int>data , vis;//上面有解释
vector<int>ans ;//答案数组
int main () {
	data["one"] = 1 , data["two"] = 4 , data["three"] = 9 , data["four"] = 16 ;
	data["five"] = 25 , data["six"] = 36 , data["seven"] = 49 , data["eight"] = 64 ;
	data["nine"] = 81 , data["ten"] = 0 , data["eleven"] = 11*11%100 , data["twelve"] = 12*12%100 ;
	data["thirteen"] = 13*13%100 , data["fourteen"] = 14*14%100 , data["fifteen"] = 15*15%100 ;
	data["sixteen"] = 16*16%100 , data["seventeen"] = 17*17%100 , data["eighteen"] = 18*18%100 ;
	data["nineteen"] = 19*19%100 , data["twenty"] = 0 , data["a"] = 1 , data["both"] = 4 ;
	data["another"] = 4 , data["first"] = 1 , data["second"] = 4 , vis["third"] = 9 ;
	vis["one"] = 1 , vis["two"] = 1 , vis["three"] = 1 , vis["four"] = 1 ;
	vis["five"] = 1 , vis["six"] = 1 , vis["seven"] = 1 , vis["eight"] = 1 ;
	vis["nine"] = 1 , vis["ten"] = 1 , vis["eleven"] = 1 , vis["twelve"] = 1 ;
	vis["thirteen"] = 1 , vis["fourteen"] = 1 , vis["fifteen"] = 1 ;
	vis["sixteen"] = 1 , vis["seventeen"] = 1 , vis["eighteen"] = 1 ;
	vis["nineteen"] = 1 , vis["twenty"] = 1 , vis["a"] = 1 , vis["both"] = 1 ;
	vis["another"] = 1 , vis["first"] = 1 , vis["second"] = 1 , vis["third"] = 1 ;//以上为预处理
	for(int i = 1 ; i <= 6  ; i ++) {
		string op ;
		cin >> op ;
		if(vis[op]) ans.push_back(data[op]) ;//如果是代表数字的字符串,就加入ans
	}
	sort(ans.begin(),ans.end()) ;//暴力排序
	if(!ans.size()) cout << "0\n" ;//特判没有数的情况
  	for(int i = 0 ; i < ans.size() ; i ++) {
		if(ans[i] < 10 && i != 0) cout << "0" ;//如果不足两位数且不是第一位,输出前导零
		cout << ans[i] ; 
	}cout << endl ;
	return 0 ;
} 

感觉打了一个线段树的长度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值