题目链接:

  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1593

题目大意

  T组数据,n个数,只有一种出现q次,其余的出现p次。(1<=T<=100,1<=n<=107,1<p,q<200,gcd(p,q)=1)

题目思路:

  【数学】

  我也不知道这题算不算数学类问题,总之我是不会做的。看了题解还是有些懵逼。

  还是orz一下学长吧

  

  1. 我们想象一个简化版的:有n个数字,其中有1个数会出现1次,其余数都会出现两次,求出现1次的这个数是多少?
  2. 因为x^x=,所以对所有数取亦或^就行了。
  3. 这题也是同样的思路,我们希望达到这样一种状态:对出现p次的数进行操作后,会抵消为0,所以我们想到了p进制:举个例子p=,数字11出现了7次,(十进制)=(7进制),然后按位分离计算——对所有数转为p进制后,各个位分离计算。
  4. 7进制)分离开,得到14,于是有47进制)*=,做无进位加法,就是0
  5. 所以,一个数转为p进制后,按位分离开,然后做p次无进位加法,就是0
  6. 上面就是核心思路。至于gcd(p,q)=1方便之后还原出答案。
  7. 其他自己想了。

学长的题解。

  f[i]表示数字i不进位加了q次完在p进制中为f[i],p和q互质所以f[i]和i一一对应(证明不会。。)
  只需要通过得到的答案中的数倒推回去就可以知道原来的数是几,之后还原回10进制答案

  1. //
  2. //by coolxxx
  3. //
  4. #include<iostream>
  5. #include<algorithm>
  6. #include<string>
  7. #include<iomanip>
  8. #include<memory.h>
  9. #include<time.h>
  10. #include<stdio.h>
  11. #include<stdlib.h>
  12. #include<string.h>
  13. #include<stdbool.h>
  14. #include<math.h>
  15. #define min(a,b) ((a)<(b)?(a):(b))
  16. #define max(a,b) ((a)>(b)?(a):(b))
  17. #define abs(a) ((a)>0?(a):(-(a)))
  18. #define lowbit(a) (a&(-a))
  19. #define sqr(a) ((a)*(a))
  20. #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
  21. #define eps 1e-8
  22. #define J 10
  23. #define MAX 0x7f7f7f7f
  24. #define PI 3.1415926535897
  25. #define inf 10000000
  26. #define N 104
  27. using namespace std;
  28. int n,m,lll,ans,cas;
  29. int p,q;
  30. int mi[N],a[N],f[N];
  31. void work(int x)
  32. {
  33. int i,j;
  34. for(i=m;i>= && x;i--)
  35. {
  36. if(x>=mi[i])
  37. {
  38. a[i]+=x/mi[i];
  39. x%=mi[i];
  40. a[i]%=p;
  41. }
  42. }
  43. }
  44. int main()
  45. {
  46. #ifndef ONLINE_JUDGE
  47. // freopen("1.txt","r",stdin);
  48. // freopen("2.txt","w",stdout);
  49. #endif
  50. int i,j,k,l;
  51. // while(~scanf("%s",s1))
  52. // while(~scanf("%d",&n))
  53. for(scanf("%d",&cas),l=;l<=cas;l++)
  54. {
  55. memset(a,,sizeof(a));
  56. scanf("%d%d%d",&n,&p,&q);
  57. for(i=;i<p;i++)f[(i*q)%p]=i;
  58. for(i=,mi[]=;mi[i-]<inf;i++)mi[i]=mi[i-]*p;
  59. m=i-;
  60. for(i=;i<=n;i++)
  61. {
  62. scanf("%d",&k);
  63. work(k);
  64. }
  65. for(j=,i=;i<=m;i++)
  66. j+=f[a[i]]*mi[i];
  67. printf("Case %d:\n%d\n",l,j);
  68. }
  69. return ;
  70. }
  71.  
  72. /*
  73. //
  74.  
  75. //
  76. */

【数学】XMU 1593 找数字的更多相关文章

  1. java实现串中找数字

    串中找数字 以下的静态方法实现了:把串s中第一个出现的数字的值返回. 如果找不到数字,返回-1 例如: s = "abc24us43" 则返回2 s = "82445ad ...

  2. 基于Visual C++2013拆解世界五百强面试题--题11-查找数字出现次数

    在排序数组中,找出给定数字出现的次数比如{ 1, 2, 2, 2, 3}中2的出现次数是3次 我们可使用二分查找发,分别查找出2最先出现的位置和最后出现的位置相减即可. 下面是上代码: #includ ...

  3. Java--正则表达式-简单的在字符串中找数字

    import org.junit.Test; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...

  4. April Fools Contest 2017 题解&源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)

    A. Numbers Joke time limit per test:2 seconds memory limit per test:64 megabytes input:standard inpu ...

  5. 课堂练习之找数字0-N中“1”出现的次数

    一.题目与要求 题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求:1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12) ...

  6. 科普:String hashCode 方法为什么选择数字31作为乘子

    1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...

  7. String hashCode 方法为什么选择数字31作为乘子

    1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...

  8. 【转】String hashCode 方法为什么选择数字31作为乘子

    某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主角31.这个 ...

  9. String hashCode 这个数字,很多人不知道!

    作者:coolblog segmentfault.com/a/1190000010799123 1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 ...

随机推荐

  1. [React Flow] Up and Running with Facebook Flow for Typed JavaScript

    Install: npm i -D flow-binnpm i -g flow-bin Init: flow init Script: "typecheck": "flo ...

  2. [javascirpt] Regex

    To Currency function toCurrency(price){ return price.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, & ...

  3. Android系统移植与驱动开发--第四章

    第四章 源代码的下载和编译 一个android内核相当于4G,而一个Linux内个只有几百M,Linux内核相对于android内核来说实在是小巫见大巫.了解android源代码不一定要详细了解,只去 ...

  4. centos7 部署ssserver

    centos7 部署shadowsocks服务端 为什么要选centos7? 以后centos7 肯定是主流,在不重要的环境还是尽量使用新系统吧 centos7 的坑 默认可能会有firewall 或 ...

  5. Wpf Binding.Path设置

    Binding.Path 获取或设置绑定源属性的路径. 每个绑定通常都具有四个组件:绑定目标对象.目标属性.绑定源,以及要使用的绑定源值的路径.有关这些数据绑定概念的更多信息,请参见数据绑定概述. 使 ...

  6. 安装PHP过程中,make步骤报错:(集合网络上各种解决方法)

    安装PHP过程中,make步骤报错:(集合网络上各种解决方法) (1)-liconv -o sapi/fpm/php-fpm /usr/bin/ld: cannot find -liconv coll ...

  7. 用XMPP实现完整Android聊天项目

    简介 这是一个完整的xmpp的Android的项目服务端使用openfire3.9.3客户端使用Android4.2.2 集成第三方:百度地图sdkasmack.jaruniversal-image- ...

  8. 认识<img>标签,为网页插入图片

    在网页的制作中为使网页炫丽美观,肯定是缺少不了图片,可以使用<img>标签来插入图片. 语法: <img src="图片地址" alt="下载失败时的替 ...

  9. 零散的笔记:jquery中的事件

    1.替代mouseover和mouseout的事件 jquery的mouseover和mouseout事件在移到子页面时也会触发,这在移到一级菜单弹出二级菜单,移到二级菜单时一级菜单也要显示时,这两个 ...

  10. java计算一个月有多少天和多少周

    import java.util.Calendar; /** * 功能概述:计算指定年月的天数和周数<br> * 创建时间:2010-5-17 下午05:25:58<br> * ...