题意:
求区间逆序数的个数,逆序数增加了个要求就是必须要是先升序在降序例如12321或者123321这样的.
思路:
水题直接写就行了,数据范围不大,估计直接求也不会超时,我看见询问只有7种情况,直接打表了,下面给出打表代码和ac代码。
打表
#include<stdio.h>
#include<string.h>
int jude(int now)
{
int num[10] ,nowid = 0;
while(now)
{
num[++nowid] = now % 10;
now /= 10;
}
int tt = nowid / 2 + nowid % 2;
for(int i = 1 ;i < tt ;i ++)
if(num[i] >= num[i+1]) return 0;
for(int i = 1 ;i <= nowid / 2 ;i ++)
if(num[i] != num[nowid-i+1]) return 0;
return 1;
}
int main ()
{
int sum[8];
memset(sum ,0 ,sizeof(sum));
sum[0] = 1;
for(int i = 1 ;i <= 1000000 ;i ++)
{
int now = jude(i);
if(now && i <= 1000) printf("%d*
" ,i);
if(i <= 10) sum[1] += now;
if(i <= 100) sum[2] += now;
if(i <= 1000) sum[3] += now;
if(i <= 10000) sum[4] += now;
if(i <= 100000) sum[5] += now;
if(i <= 1000000) sum[6] += now;
}
for(int i = 0 ;i <= 6 ;i ++)
printf("%d**
" ,sum[i]);
getchar();
return 0;
}
AC
#include<stdio.h>
int main ()
{
int t ,n;
scanf("%d" ,&t);
while(t--)
{
scanf("%d" ,&n);
if(n == 0)printf("%d
" ,1);
if(n == 1)printf("%d
" ,9);
if(n == 2)printf("%d
" ,18);
if(n == 3)printf("%d
" ,54);
if(n == 4)printf("%d
" ,90);
if(n == 5)printf("%d
" ,174);
if(n == 6)printf("%d
" ,258);
}
return 0;
}