高校俱樂部第二屆戰神杯題解

weixin_30639719發表於2020-04-05

Njzy學習了迴文串後聯想到了迴文數,他希望統計出一個區間內的全部迴文數。

如今給定一個閉區間[a,b],求這個區間裡有多少個迴文數。比方[20,30],僅僅有一個迴文數那就是22.

 輸入描寫敘述:   輸入包括多組測試資料,每組測試資料包括兩個整數a,b,(0<a<=b<10^6)。

輸出描寫敘述:   對於每組測試資料輸出對應的答案。


思路:水題。這個明顯是水神杯...聰明的你,肯定不會暴力求解的....對吧?!

太聰明的你,說不定還會當成線段樹來拍...可是正常的你,應該會dp一下吧。

大概就是。一次遍歷。考慮[0,i]的迴文數個數。[l,r]的迴文數就是[0,r]-[0,l-1]最後每次查詢就是O(1),輸出ans[m]-ans[n-1],與CF的前次非常像的做法。我當時用了線段樹!

dp方程就是 dp[i]=dp[i-1]+symm(i)。


/***********************************************************
	> OS     : Linux 3.2.0-60-generic #91-Ubuntu
	> Author : yaolong
	> Mail   : dengyaolong@yeah.net 
	> Time   : 2014年06月03日 星期二 17:53:49
 **********************************************************/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int ans[1000001];

bool symm(int m)
{
int temp = m,n=0;
while (temp)
{
n = n*10+temp%10;
temp = temp/10;
}
return (m == n);
}


int main(){
    ans[0]=0;
    for(int i=1;i<=1000000;i++){
        if(symm(i)){
            ans[i]=ans[i-1]+1;
        }else{
            ans[i]=ans[i-1];
        }
    }
    int n,m;
    while(cin>>n>>m){
        cout<<ans[m]-ans[n-1]<<endl;
    }
}



轉載於:https://www.cnblogs.com/yxwkf/p/5260969.html

相關文章