hdu5062 简单题

来源:互联网 发布:对数据库的认识 编辑:程序博客网 时间:2024/05/21 00:48
题意:
      求区间逆序数的个数,逆序数增加了个要求就是必须要是先升序在降序例如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*\n" ,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**\n" ,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\n" ,1);
         if(n == 1)printf("%d\n" ,9);
         if(n == 2)printf("%d\n" ,18);
         if(n == 3)printf("%d\n" ,54);
         if(n == 4)printf("%d\n" ,90);
         if(n == 5)printf("%d\n" ,174);
         if(n == 6)printf("%d\n" ,258);
   }
   return 0;   
}
   
   
   








   
   
   





0 0