usaco Dual Palindromes

/*
ID: modengd1
PROG: dualpal
LANG: C++
*/
#include <iostream>
#include <stack>
#include <stdio.h>
#include <string.h>

using namespace std;
char leter[20]={‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘,‘I‘,‘J‘};
//进制转换,将x转化为base进制的数的字符串表示形式存入out数组
void changetheBase(int x,int base,char out[60])
{
    stack<char> S;
    int i=0;
    while(x>0)
    {
        S.push(leter[x%base]);
        x/=base;
    }
    for(i=0;!S.empty();i++)
    {
        out[i]=S.top();
        S.pop();
    }
    out[i]=0;
}
//检测一个以‘\0‘结尾的字符串是不是回文串
bool isPalindromic(char input[60])
{
    int temp[60];
    int len=strlen(input);
    for(int i=0;i<len;i++)
    {
        temp[len-i-1]=input[i];
    }
    for(int i=0;i<len;i++)
    {
        if(input[i]!=temp[i])
            return false;
    }
    return true;
}
bool islegal(int x)
{
    char out[60];
    int ans=0;

    for(int i=2;i<=10;i++)
    {
        changetheBase(x,i,out);
        if(isPalindromic(out))
        {
            ans++;
        }
        if(ans>=2)
            return true;
    }
    return false;
}
int main()
{
    int N,S,ans;
    freopen("dualpal.in","r",stdin);
    freopen("dualpal.out","w",stdout);
    scanf("%d%d",&N,&S);
    ans=0;
    for(int i=S+1;ans<N;i++)
    {
        if(islegal(i))
        {
            cout<<i<<endl;
            ans++;
        }
    }
    return 0;
}

  

时间: 2025-01-20 11:53:31

usaco Dual Palindromes的相关文章

洛谷P1207 [USACO1.2]双重回文数 Dual Palindromes

P1207 [USACO1.2]双重回文数 Dual Palindromes 291通过 462提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就不是回文数. 事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数. 编

1.2 Dual Palindromes

Dual PalindromesMario Cruz (Colombia) & Hugo Rickeboer (Argentina) A number that reads the same from right to left as when read from left to right is called a palindrome. The number 12321 is a palindrome; the number 77778 is not. Of course, palindrom

USACO 1.2 Dual Palindromes (回文,进制转换)

废话不哆嗦,贴代码: /* ID:twd30651 PROG:dualpal LANG:C++ */ #include<iostream> #include<fstream> #include<stdlib.h> #include<string.h> using namespace std; char s[100]; int N,S; void gs(int num,int BASE) { int index=0; while(num/BASE) { s[i

USACO Section1.2 Dual Palindromes 解题报告

dualpal解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 给出N和S,找出大于S的前N个双回文数. 双回文数定义:在二进制至十进制中的两种(或两种以上)进制下是回文数.[数据范围] 1

洛谷 P1207 [USACO1.2]双重回文数 Dual Palindromes

题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做"回文数".例如,12321就是一个回文数,而77778就不是.当然,回文数的首和尾都应是非零的,因此0220就不是回文数. 事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数. 编一个程序,从文件读入两个十进制数N (1 <= N <= 15)S (0 < S < 10000)然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是

Section 1.2.5 Dual Palindromes 水

http://www.wzoi.org/usaco/11%5C302.asp pat 没太水了没什么好说的. 然而感觉如果不计代价的话,先把string reverse再比较是否相同来判断回文,好方便pat #include <bits/stdc++.h> using namespace std; bool gao(int base, int n){ int i, j; string ans = ""; while(n){ ans += n % base + '0'; n

USACO Prime Palindromes 构造回文数

这道题目一点也不卡素数的判断 就是朴素的sqrt(n) 也不卡 所以~放心的用吧. 构造回文的时候看了HINT 其中是这么写的: Generate palindromes by combining digits properly. You might need more than one of the loops like below. /* generate five digit palindrome: */ for (d1 = 1; d1 <= 9; d1+=2) { /* only odd

usaco Prime Palindromes

给定两个边界,求输出所有这个边界以内,既是素数又是回文的数字: 一开始用的素数筛,爆内存了. 改为生成回文后检测是否为素数,在如何递归生成回文上卡了很久.一直纠结于边界情况的处理. /* ID: modengd1 PROG: pprime LANG: C++ */ #include <iostream> #include <stdio.h> #include <string.h> #include <memory.h> #include <math.h

Dual Palindromes

链接 分析:直接暴力求解,傻逼题 1 /* 2 ID:wanghan 3 PROB:dualpal 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8 #include "cstring" 9 #include "string" 10 using namespace std; 11 string Rev(int num,int b){ 12 string t=