【枚举+数学】【HDU1271】整数对 难度:五颗星
整数对
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2572 Accepted Submission(s): 879
所以现在小希希望你编写一个程序,来帮助她找到尽可能多的解。
例如,Gardon想的是A=31,B=3 告诉小希N=34,
小希除了回答31以外还可以回答27(27+7=34)所以小希可以因此而得到一个额外的糖果。
34
152
21
0
27 31 32
126 136 139 141
No solution.
假设A中去掉的数在第k+1位,可以把A分成三部分,低位,k,和高位。
A == a + b * 10^k + c * 10^(k+1)
B == a + c * 10^k
N == A + B == 2 * a + b * 10^k + c * 10^k * 11
其中b是一位数,b * 10^k不会进位,用10^k除N取整就可以得到b + 11c,再用11除,商和余数就分别是c和b了。但是这里有个问题a是一个小于10^k的数没错,但是2a有可能产生进位,这样就污染了刚才求出来的b + 11c。但是没有关系,因为进位最多为1,也就是b可能实际上是b+1,b本来最大是9,那现在即使是10,也不会影响到除11求得的c。因此c的值是可信的。然后根据2a进位和不进位两种情况,分别考虑b要不要-1,再求a,验算,就可以了。迭代k从最低位到最高位做一遍,就可以找出所有可能的A。
至于判断进位不进位 不需要直接判断 先不减b 求出a 此时的a是不进位的 然后b-- 再求a 此时的a就是进位的 判断这两个a时候合法即可
#include<stdio.h>
int s[100];
int cnt=1;
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
int N,i,a,b,c;
while(scanf("%d",&N)!=EOF&&N!=0)
{
cnt=1;
for(i=1;i<=N;i*=10)
{
c=(N/i)/11;
b=(N/i)%11;
if((b!=0||c!=0)&&b<10)
{
a=(N-(b*i+11*c*i))/2;
if((a*2+b*i+11*c*i)==N)
s[cnt++]=a+b*i+c*i*10;
}
b--;
if((b!=0||c!=0)&&b>=0)
{
a=(N-(b*i+11*c*i))/2;
if((a*2+b*i+11*c*i)==N)
s[cnt++]=a+b*i+c*i*10;
}
}
cnt--;
if(cnt==0) {printf("No solution.\n");continue;}
qsort(s+1,cnt,sizeof(s[1]),cmp);
printf("%d",s[1]);
for(i=2;i<=cnt;i++)
if(s[i]!=s[i-1])
printf(" %d",s[i]);
printf("\n");
}
return 0;
}
这段代码 有几个细节需要处理好
1.
if((b!=0||c!=0)&&b<10)
if((b!=0||c!=0)&&b>=0)
这两个判断保持 0<=b<10
并且如果b==0 c==0 那么等于去删前导0没有意义
2.
a=(N-(b*i+11*c*i))/2;
if((a*2+b*i+11*c*i)==N)
这两个难道有意义吗?当然有意义 2a可能会为奇数 显然是不符合题意的 所以再验算排除这种情况 当然用odd()也行
3.判重要注意
【枚举+数学】【HDU1271】整数对 难度:五颗星的更多相关文章
- js快速打印一个五分制(五颗星)的评分情况
1.函数 下面这个函数实现了在html页面中快速打印一个五分制(五颗星)的评分情况: function getRating(rating) { if(rating > 5 || rating & ...
- 【概率dp,难度3颗星】hdu-5001(2014鞍山网络赛)
给你一个连通的无向图,等概率随机选取一个起点,走d步,每一步等概率走到相邻的点.问走完d步之后,每个点没有被经过的概率. 推状态的关键当然就是对这个“从任意起点走完d步点node没被经过的概率”的理解 ...
- BZOJ_1406_[AHOI2007]密码箱_枚举+数学
BZOJ_1406_[AHOI2007]密码箱_枚举+数学 Description 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子 ...
- 微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示
一.前言 项目中遇到的评分相关的需求其实还挺多.之前也写过网页中关于评分功能实现的文档.这次,是基于微信小程序开发而提炼出一个简单方便使用的方法,网页开发中同样可用.这次使用的还是字体,主要是字体这个 ...
- 3.6 万颗星!开源 Web 服务器后起之秀,自带免费 HTTPS 开箱即用
众所周知,Web 服务器是 Web 开发中不可或缺的基础服务,在开发中经常会用到.耳熟能详的开源 Web 服务器有久负盛名的 Apache.性能强劲的 Nginx.而我们今天要介绍的开源项目是采用 G ...
- 进阶篇之纯css+字体实现五角星(半颗星)评分
1.前言 之前写了一篇实现五角星打分效果的demo.这个demo用来实现打分效果绰绰有余,那么有时候我们在统计评分的时候,就会有半颗星或者1/3颗星星这样的那要如何实现呢?来来来,纯字体+css实现! ...
- css简单实现五角星评分、点赞收藏、展示评分(半颗星、1/3颗星)
1.前言 之前做的好几个项目中,都会遇到打分,评分,点赞这样的需求,写了很多次,每次需要再写的时候,就会翻出之前写过的代码,然后copy过来.总觉得这样的话没有进步,没有把知识放进脑袋里,所以,自己花 ...
- Style2Paints:用AI技术为线稿快速上色的工具(GitHub 3310颗星)
python 开源项目: Style2Paints:用AI技术为线稿快速上色的工具(GitHub 3310颗星) https://github.com/lllyasviel/style2paints
- word2vec 中的数学原理具体解释(五)基于 Negative Sampling 的模型
word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了非常多人的关注. 因为 word2vec 的作者 Tomas ...
随机推荐
- Java中随机数生成的两种方法,以及math的floor
1.Math的random方法,调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选 ...
- c#中的表达式
// 把变量和字面值(在使用运算符时,将它们统称为操作数)与运算符组合起来 // 就可以创建表达式,表达式是计算的基本构件 // 操作数可以是数值也可以是变量 + ; ; int num3 = num ...
- java 对象初始化和代码块初始化顺序
class A { public A(){ System.out.println("测试!!!!!!!!!!!"); } } class Demo19 extends A { { ...
- AsyncTask使用注意事项
AsyncTask是android自带的一个异步处理线程 它带了很多参数 都很方便使用 但是有一些注意事项 1: 官网说明: AsyncTasks should ideally be used for ...
- Qt Creator下载
Qt官网 http://qt.digia.com qt的历史版本可以到http://download.qt-project.org/archive/qt/下载
- 【mysql】1206 SQLSTATE: HY000 (ER_LOCK_TABLE_FULL) 问题
最近在做一个项目,其中一需求是:部分数据库中的数据需要定时删除掉(满足一定条件,比如7天前的数据都不保留) 最初的执行方法: 使用Quartz定时执行数据库操作,进行数据删除,数据库操作使用delet ...
- base64自定义编码表 php版本
在一次接口对接中,要用到base64自定义编码表来进行编码和解码,从网上搜索了一下,讲原理的比较多也比较透彻,提供的编码的例子但是没有解码的,以下是自己实现的一个base64自定义字典解码的例子,比较 ...
- [C++程序设计]引用
对一个数据可以使用“引用”(reference),这是C++对C的一个重要扩充,引用是一种新的变量类型,它的作用是为一个变量起一个别名.假如有一个变量a,想给它起一个别名b,可以这样写:int a; ...
- mysql----二进制包安装
1.增加mysql用户 useradd mysql 2.解压mysql 二进制包到/usr/local/ -linux-glibc2.-x86_64.tar.gz -C/usr/local/ 3.创建 ...
- STM32工程中出现 error: A1163E: Unknown opcode R0, , expecting opcode or Macro错误分析及处理
最近测试以前的一个程序,一般都是打开以前写的程序修改参数直接测试 但是发现以前的编译后出现错误. 奇怪了,以前的出现都是调试好了的啊,一般都是没有错误的,迅速找问题 跳转到错误代码行 代码区域 Hea ...