USACO1.2.5 双重回文数

来源:互联网 发布:光明大陆 知乎 编辑:程序博客网 时间:2024/05/17 06:33

题目

思路

讲道理这应该是一个枚举,可问题是在不知道数据分布的情况下,如果真的到了32位整型,是枚举不出来的
因此先把数据生成一部分看一下规律,是否在s之内最大n的时候枚举范围都在承受范围之内
经过验证一万以内的双重回文数有接近五百个,一万到两万有接近50个,所以可以枚举,一次判定得而时间复杂度不会超过两个0

代码

#include<cmath>#include<queue>#include<cstdio>#include<cctype>#include<vector>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int n,s;vector<int>a;bool jud(int x,int i)//判断x的i进制是不是回文数{    a.clear();    do    {        a.push_back(x%i);        x/=i;    }while(x);    for(int i=0,j=a.size()-1;i<j;i++,j--)        if(a[i]!=a[j])            return 0;    return 1;}bool calc(int x)//判断x是不是双重回文数{    int cnt=0;    for(int i=2;i<=10;i++)    {        if(jud(x,i))        {            cnt++;            if(cnt>=2)                return 1;        }    }    return 0;}int main(){    //freopen("in.txt","r",stdin);    //freopen("USACO1.2.5附带打表.txt","w",stdout);    scanf("%d%d",&n,&s);    for(int i=s+1;n;i++)    {        if(calc(i))        {            cout<<i<<endl;            n--;        }    }    return 0;}

收获
1、利用一些点可以简化代码,比如说for循环里的条件可以不太相干
2、认真读题,第一次提交就错了,因为要从大于s的开始,这个很吃亏啊

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 夏天骑摩托太热怎么办 半框眼镜线断了怎么办 镜片从镜框脱了怎么办 干活累的肩膀痛怎么办 干活累的肩膀疼怎么办 骑山地车手腕和脖子疼怎么办? 布艺沙发坐软了怎么办 篮球护臂太大了怎么办 豪爵摩托车没电怎么办 西装裤裤脚太宽怎么办 全棉衣服有异味怎么办 羊剪绒毛领褪色怎么办 篮球鞋买大2码怎么办 新鞋穿着脚累怎么办 买了国产乔丹怎么办 跑完1000米吐了怎么办 翻毛鞋脚染色了怎么办 翻毛皮被染色了怎么办 防鹿皮绒鞋染色怎么办 亚瑟士跑鞋挤脚怎么办 亚瑟士跑鞋很紧怎么办 飞线鞋面破了怎么办 新袜子穿了很滑怎么办 鞋底硬脚底板疼怎么办 新鞋前面太硬怎么办 新鞋子鞋底太硬怎么办 不到一米八的身高想扣篮怎么办 鞋胶粘在鞋面上怎么办 鞋子上沾了胶怎么办 休闲鞋号码大了半码怎么办 高跟鞋大了一码怎么办 浅口单鞋买大了怎么办 新鞋子磨大脚趾怎么办 鞋前面磨大脚趾怎么办 白鞋子蹭黑了怎么办 夏天穿皮鞋捂脚怎么办 耐克赤足掉漆怎么办 鞋子买回来小了怎么办 布鞋大了一码怎么办 鞋子买小了一码怎么办 运动鞋小了一码怎么办