zoukankan      html  css  js  c++  java
  • 洛谷 P1603 斯诺登的密码

    我一开始还没看懂非正规数字的意义,以为那里写的单词不算,蒙了好久,而且这题非常考验仔细程度,一不小心就RE,WA。

    嗯,好像讲了些废话,那我们看看思路,我的做法和前面的大佬们有些不同,因为这题只有六个字母,很多人都是单个判断它们是不是26种(one~twenty)情况中的一种,但是如果数据给的多了(超过了6个单词)感觉效率会不高;我们可以反过来。

    首先,我们可以在26个单词(one~twenty)前后加一个空格,因为题目给的句子中单词前后都有空格(句子最前面要手动加一个空格。然后我们就可以用 find 函数对26种情况中的每个单词在句子中出现的次数进行累加。然后在排列输出(对应数字小的一定在前面)

    下面给上代码:

    #include<bits/stdc++.h>
    using namespace std;
    string a[27]={""," one "," two "," three "," four "," five "," six "," seven "," eight "," nine "," ten "," eleven "," twelve ", " thirteen ", " fourteen ", " fifteen ", " sixteen ", " seventeen ", " eighteen ", " nineteen ", " twenty "," a "," both "," another "," first "," second "," third "};
    int s[7],i,j,b,t=1;
    int main(){
    	getline(cin,a[0]);
    	a[0]=' '+a[0];//在最前面加空格。 
    	for(i=1;i<=26;i++){
    		b=0;
    		while(a[0].find(a[i],b)!=string::npos){//搜索出现次数 
    			t++;//出现一次,累加一次。 
    			b=a[0].find(a[i],b)+1;//从下一个编号搜索下一个单词 
    		}
    		for(;j<t;j++) s[j]=((i-1)%20+1)*((i-1)%20+1)%100;//计算对应数字 
    	}
    	sort(s+1,s+t);//排序 
    	cout<<s[1];//第一个不需要补空格 
    	for(i=2;i<t;i++)
    		printf("%.2d",s[i]);//补空格输出 
    	return 0;
    }
    
    ✐☎博主撰文不易,转载还请注明出处;若对本文有疑,请私信或在下方讨论中提出。O(∩_∩)O谢谢!☏

    ☃〔尽管小伙伴们肯定有千百种方式针对,但博主还是极其非常十分不要脸的把反对键吃掉辣!〕☃

    ✿『$At$ $last$:非常一(hu)本(shuo)正(ba)经(dao)的:博主很笨,请不要欺负他』✿✍

  • 相关阅读:
    [转]在nodejs使用Redis缓存和查询数据及Session持久化(Express)
    [转]最常用的商务职场英语邮件100个句式
    [转]玩转Angular2(4)--制作左侧自动定位菜单
    [转]Angular开发(十八)-路由的基本认识
    Consul之:服务注册与发现
    Consul之:key/value存储
    服务容错保护断路器Hystrix之六:服务熔断和服务降级
    延时队列:Java中的DelayQueue
    分布式延迟消息队列实现分析与设计
    基于redis的延迟消息队列设计
  • 原文地址:https://www.cnblogs.com/812-xiao-wen/p/9879247.html
Copyright © 2011-2022 走看看