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;
}
}