【数学】XMU 1593 找数字
题目链接:
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一下学长吧
我们想象一个简化版的:有n个数字,其中有1个数会出现1次,其余数都会出现两次,求出现1次的这个数是多少?
因为x^x=,所以对所有数取亦或^就行了。
这题也是同样的思路,我们希望达到这样一种状态:对出现p次的数进行操作后,会抵消为0,所以我们想到了p进制:举个例子p=,数字11出现了7次,(十进制)=(7进制),然后按位分离计算——对所有数转为p进制后,各个位分离计算。
(7进制)分离开,得到1和4,于是有4(7进制)*=,做无进位加法,就是0。
所以,一个数转为p进制后,按位分离开,然后做p次无进位加法,就是0。
上面就是核心思路。至于gcd(p,q)=1方便之后还原出答案。
其他自己想了。
学长的题解。
f[i]表示数字i不进位加了q次完在p进制中为f[i],p和q互质所以f[i]和i一一对应(证明不会。。)
只需要通过得到的答案中的数倒推回去就可以知道原来的数是几,之后还原回10进制答案
//
//by coolxxx
//
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define eps 1e-8
#define J 10
#define MAX 0x7f7f7f7f
#define PI 3.1415926535897
#define inf 10000000
#define N 104
using namespace std;
int n,m,lll,ans,cas;
int p,q;
int mi[N],a[N],f[N];
void work(int x)
{
int i,j;
for(i=m;i>= && x;i--)
{
if(x>=mi[i])
{
a[i]+=x/mi[i];
x%=mi[i];
a[i]%=p;
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k,l;
// while(~scanf("%s",s1))
// while(~scanf("%d",&n))
for(scanf("%d",&cas),l=;l<=cas;l++)
{
memset(a,,sizeof(a));
scanf("%d%d%d",&n,&p,&q);
for(i=;i<p;i++)f[(i*q)%p]=i;
for(i=,mi[]=;mi[i-]<inf;i++)mi[i]=mi[i-]*p;
m=i-;
for(i=;i<=n;i++)
{
scanf("%d",&k);
work(k);
}
for(j=,i=;i<=m;i++)
j+=f[a[i]]*mi[i];
printf("Case %d:\n%d\n",l,j);
}
return ;
} /*
// //
*/
【数学】XMU 1593 找数字的更多相关文章
- java实现串中找数字
串中找数字 以下的静态方法实现了:把串s中第一个出现的数字的值返回. 如果找不到数字,返回-1 例如: s = "abc24us43" 则返回2 s = "82445ad ...
- 基于Visual C++2013拆解世界五百强面试题--题11-查找数字出现次数
在排序数组中,找出给定数字出现的次数比如{ 1, 2, 2, 2, 3}中2的出现次数是3次 我们可使用二分查找发,分别查找出2最先出现的位置和最后出现的位置相减即可. 下面是上代码: #includ ...
- Java--正则表达式-简单的在字符串中找数字
import org.junit.Test; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...
- 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 ...
- 课堂练习之找数字0-N中“1”出现的次数
一.题目与要求 题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求:1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12) ...
- 科普:String hashCode 方法为什么选择数字31作为乘子
1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...
- String hashCode 方法为什么选择数字31作为乘子
1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...
- 【转】String hashCode 方法为什么选择数字31作为乘子
某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主角31.这个 ...
- String hashCode 这个数字,很多人不知道!
作者:coolblog segmentfault.com/a/1190000010799123 1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 ...
随机推荐
- [Angular 2] Use Service use Typescript
When creating a service, need to inject the sercive into the bootstrap(): import {bootstrap, Compone ...
- Effective C++ 总结(二)
四.设计与声明 条款18:让接口容易被正确使用,不易被误用 理想上,如果客户企图使用某个接口而却没有获得他所预期的行为,这个代码不该通过编译:如果代码通过了编译,它的行为就 ...
- C/C++ Linux 程序员必须了解的 10 个工具
1. 基本命令http://mally.stanford.edu/~sr/computing/basic-unix.htmlhttp://pangea.stanford.edu/computing/u ...
- 最小圆覆盖 hdu 3007
今天学习了一下最小圆覆盖, 看了一下午都没看懂, 晚上慢慢的摸索这代码,接合着别人的讲解, 画着图跟着代码一步一步的走着,竟然有些理解了. 最小圆覆盖: 给定n个点, 求出半径最小的圆可以把这些点全部 ...
- ScrollView、ListView嵌套
1.手动设置ListView高度 经过测试发现,在xml中直接指定ListView的高度,是可以解决这个问题的,但是ListView中的数据是可变的,实际高度还需要实际测量.于是手动代码设置ListV ...
- SQL 插入查询的最大ID 号 进行批量
INSERT INTO tbl_image_language ( code, docomo_cd, au_cd, softbank_cd ) SELECT DISTINCT((SELECT max(c ...
- My.Ioc 代码示例——使用观察者机制捕获注册项状态的变化
在 My.Ioc 中,要想在服务注销/注册时获得通知,可以通过订阅 ObjectBuilderRegistered 和 ObjectBuilderUnregistering 这两个事件来实现.但是,使 ...
- C#实现发送邮件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- asp.net 中的那些编译错误(1):控件包含代码块(即<% ... %>),因此无法修改控件集合
在编译页面的时候出现:控件包含代码块(即 <% ... %>),因此无法修改控件集合错误 一般原因是: 在<head runat="server">< ...
- 创建DBLink语句
--linkName DBLink名 --username 用户名 --password 密码 --tns TNS配置字符串 create database link &linkName co ...