hdu5062 简单题
简单
2023-09-11 14:14:00 时间
题意:
求区间逆序数的个数,逆序数增加了个要求就是必须要是先升序在降序例如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;
}
求区间逆序数的个数,逆序数增加了个要求就是必须要是先升序在降序例如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;
}
相关文章
- Go内存分配那些事,就这么简单!
- 自己实现简单的AOP(五)使Demo适应webApi、亦可完成属性自动注入
- Windows Store App JavaScript 开发:简单对象绑定
- Samba简单配置--匿名用户共享资料可读可写的实现
- shiro简单学习的简单总结
- 简单讲解一下负载均衡、反向代理模式的优点、缺点
- 开发一个简单的工具,导出github仓库所有issue列表
- 云上自动化:云上编排让上云更简单
- java中会存在内存泄漏吗,请简单描述。
- 驱动开发之 一个简单的截取键盘按键的驱动
- C#简单实现表达式目录树(Expression)
- 使用Postman进行简单压力测试
- 从零开始,搭建一个简单的UVM验证平台(一)