A - 你能数的清吗 51Nod - 1770(找规律)

演演是个厉害的数学家,他最近又迷上了数字谜。。。。

他很好奇 xxx...xxx(n个x)*y 的答案中 有多少个z,x,y,z均为位数只有一位的整数。

大概解释一下:

22222*3 = 66666,里面有5个6。

Input 多组测试数据。 第一行有一个整数T,表示测试数据的数目。(1≤T≤5000)

接下来有T行,每一行表示一组测试数据,有4个整数x,y,z,n。 (1≤x,y≤9,0≤z≤9,1≤n≤10^9) Output

对于每一组数据,输出一个整数占一行,表示答案。 Sample Input 2 2 3 6 5 3 3 0 10 Sample Output

5 0

思路

  1. [ ] 题意:这一题给我们一个长度为n各个位数上的数均是x,然后让这个数与y相乘,得到一个多位数,问在这个多位数的位置上数等 z 等数量有多少个
  2. [ ] 思路
    • 首先这一题的数据范围是 \(1 =< n<= 1e9\),所有所用的算法复杂度\(<=O(n)\)
    • 规律1:对于\(x*y<10\),这个多位数上的每一个数都相同,直接比较x*y 与 z 的值就行了
    • 规律2:(在考虑这个规律之前,我们把所乘得到的多位数 分 开始部分、中间部分、结尾部分 三个字段) 对于\(x*y >=10\) ,这个时候 我们就要考虑到 进位 的问题了,但是我们发现,虽然这个 有进位问题但是 其中在这个中间部分仍然可能(对于n比较的大的时候)有一个连续子段,在这子段上各个位数上的数字都相同,而对与这个多位数的 结尾部分一定只有一个数与中间部分的数不同 ,而在开始部分最多只包含3个数与中间连续部分呢的数一定不同,那么在这个规律的基础上解决 “进位” 所带来的麻烦情况,剩下的就是遍历去判断 z 是否与 “中间位置的那个相同的数”“开头最多超过三个数”“结尾的那个数”是否相同,因为中间部分的非常长的连续相同的字段,所以我们可以优化很多不必要的比较

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. using namespace std;
  5. inline void Read(int & x)
  6. {
  7. int ans = 0, f = 1;
  8. char ch = getchar();
  9. while(! isdigit(ch)) { if(ch == '-') f = -1; ch =getchar(); }
  10. while(isdigit(ch)) { ans *= 10, ans += ch - '0'; ch = getchar(); }
  11. x = ans * f;
  12. }
  13. inline int read()
  14. {
  15. char ch = getchar();
  16. int x = 0, f = 1;
  17. while(ch < '0' || ch > '9')
  18. {
  19. if(ch == '-') f = -1;
  20. ch = getchar();
  21. }
  22. while('0' <= ch && ch <= '9')
  23. {
  24. x = x * 10 + ch - '0';
  25. ch = getchar();
  26. }
  27. return x * f;
  28. }
  29. int main()
  30. {
  31. /* freopen("A.txt","r",stdin); */
  32. int x, y, z, n;
  33. int t;
  34. //scanf("%d", &t);
  35. t = read();
  36. while(t --)
  37. {
  38. //scanf("%d %d %d %d", &x, &y, &z, &n);
  39. x = read(), y = read(), z = read(), n = read();
  40. if(x * y < 10)
  41. {
  42. if(x*y == z)
  43. printf("%d\n", n);
  44. else
  45. printf("0\n");
  46. }
  47. else
  48. {
  49. int jinzhi = x*y / 10;
  50. int yushu = x*y % 10;
  51. int a[10] = {0};
  52. a[yushu] ++;
  53. while(-- n)
  54. {
  55. yushu = (x*y + jinzhi) % 10;
  56. jinzhi = (x*y + jinzhi) / 10;
  57. if(a[yushu])
  58. {
  59. a[yushu] += n;
  60. break;
  61. }
  62. else
  63. {
  64. a[yushu] ++;
  65. }
  66. }
  67. a[jinzhi] ++;
  68. printf("%d\n", a[z]);
  69. }
  70. }
  71. return 0;
  72. }

A - 你能数的清吗 51Nod - 1770(找规律)的更多相关文章

  1. A - 你能数的清吗 51Nod - 1770

    题目: 演演是个厉害的数学家,他最近又迷上了数字谜.... 他很好奇  xxx...xxx(n个x)*y 的答案中 有多少个z,x,y,z均为位数只有一位的整数. 大概解释一下: 22222*3 = ...

  2. 51nod 1770 数数字

    1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题  收藏  关注 统计一下 aaa ⋯ aaan个a × b 的结果里面 ...

  3. POJ2402 Palindrome Numbers第K个回文数——找规律

    问题 给一个数k,给出第k个回文数  链接 题解 打表找规律,详见https://www.cnblogs.com/lfri/p/10459982.html,差别仅在于这里从1数起. AC代码 #inc ...

  4. [CQOI2014]数三角形 题解(找规律乱搞)

    题面 其实这道题不用组合数!不用容斥! 只需要一个gcd和无脑找规律(滑稽 乍一看题目,如果单纯求合法三角形的话情况太多太复杂,我们可以从局部入手,最终扩展到整体. 首先考虑这样的情况: 类似地,我们 ...

  5. ACM学习历程—51NOD 1770数数字(循环节)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的A题.由于数字全部相同,乘上b必然会 ...

  6. 51nod 1770 数数字 找规律,注意进位,时间复杂度O(n)

    题目: 这题很简单,找规律即可. 考虑两次进位: 1.a*b时的进位. 2.aa*b时加法时进位. 代码: #include <bits\stdc++.h> using namespace ...

  7. 51nod 1463 找朋友(线段树+离线处理)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1463 题意: 思路: 好题! 先对所有查询进行离线处理,按照右区间排序, ...

  8. Codeforces 980 并查集/模拟贪心最小字典序 找规律/数去除完全平方因子 逆思维倍增预处理祖先标记点

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

  9. 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

随机推荐

  1. JZOJ 5258. 友好数对 (Standard IO)

    5258. 友好数对 (Standard IO) Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Description I ...

  2. JZOJ 3929. 【NOIP2014模拟11.6】创世纪

    3929. [NOIP2014模拟11.6]创世纪 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 上帝手 ...

  3. JS循环嵌套的执行原理

    [逆战班] 循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构,外循环执行一次,内循环全部执行完,直到外循环执行完毕,整个循环结束. while.do.. while和for循环语句都可以进行嵌 ...

  4. 2019-分享数百个 HT 工业互联网 2D 3D 可视化应用案例分享

    继<分享数百个 HT 工业互联网 2D 3D 可视化应用案例>2018 篇,图扑软件定义 2018 为国内工业互联网可视化的元年后,2019 年里我们与各行业客户进行了更深度合作,拓展了H ...

  5. js 实现图片的放大和缩小

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 【工具】Intel HLS工具

    目前新版本的Quartus 软件 都自带有  HLS 工具,比如 18.1版本安装以后,HLS相关文件夹如下: HLS工具 也可以单独下载: https://www.intel.com/content ...

  7. (转)协议森林14 逆袭 (CIDR与NAT)

    协议森林14 逆袭 (CIDR与NAT) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! IPv4由于最初的设计原因,长度只有32 ...

  8. vs2017打包exe安装包

    1,安装扩展程序Install Projects 2,在打开的界面搜索Install,找到Install Projects 3,在要打包的项目解决方案下创建一个生成exe的项目 4,在打包项目的文件系 ...

  9. 关于使用 Laravel 服务容器的优势介绍

    如果说laravel框架的核心是什么,那么无疑是服务容器.理解服务容器的概念,对于我们使用laravel太重要了,应该说是否理解服务容器的概念是区分是否入门laravel的重要条件.因为整个框架正是在 ...

  10. 开源项目OEIP 游戏引擎与音视频多媒体(UE4/Unity3D)

    现开源一个项目 OEIP 项目实现的功能Demo展示 这个项目演示了在UE4中,接入摄像机通过OEIP直接输出到UE4纹理上,并直接把UE4里的RenderTarget当做输入源通过OEIP里GPU管 ...