再数17

题目:

【问题描述】

之前,小cot发邮件问小cos一个区间所有整数里有多少个“17”,小cos在你的帮助下回答了这个奇怪的问题,然而得到的回信只有“你对了:-)”这几个字……小cos耿耿于怀,始终弄不明白小cot的意图。

终于,小cos决定主动问小cot一些问题。他先写了封邮件,问“17”的含义,回信写道:“我喜欢……17这个数字~”。小cos当然不能接受这样的回答,继续追问她为什么要自己数17,可回信又是简单的一句话:“我喜欢你……数17~”。

小cos急了,狠敲键盘,发了一连串问号过去。几分钟后,对方回道:“想要知道为什么,你再回答我一个问题——

“给你一个有n个正整数的数列{an}。一个正整数x若满足在数列{an}中存在一个正整数ai,使x≡17(mod ai),那么x就是一个‘cost数’。请问1到m的正整数中,有多少个‘cost数’?”

小cos看得一头雾水,只好又来请教你……

【输入】

输入文件名为c17.in,共2行。

第一行两个正整数n和m,意义见问题描述。

第二行n个正整数,分别为数列{an}中的n个数。

【输出】

输出文件名为c17.out。

输出一个整数,表示1到m中“cost数”的个数。

【输入输出样例】


c17.in


c17.out


3 100

18 22 23


11

【数据范围】

对于20%的数据,有n≤20,m≤100,000;

另有40%的数据,n≤3,m<2^31;

对于100%的数据,有n≤30,m<2^31,17<ai<2^31。

(注:“≡”为同余符号,a≡b (mod k) 即a mod k = b mod k)

唔,考试时拿到这个题直接用了欧几里得,然而忽略的判重。。。只过了俩组T-T(连对拍都都没注意!!)那么正解呢,利用了容斥原理来判重,下面贴出代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
long long x[105],ans;
long long dd(long long a,long long b)
{
    long long t,q=a,w=b;
    for(t=q%w;w>0;q=w,w=t)t=q%w;
    return q;
}
void cl(int a,int b,long long c)
{
    if(c>n||a==m) return ;
    long long ss=c*x[a]/dd(c,x[a]);
    if (b%2==0) ans+=n/ss;
        else ans-=n/ss;
    cl(a+1,b+1,ss);
    cl(a+1,b,c);
}
int main()
{
    freopen("c17.in","r",stdin);
    freopen("c17.out","w",stdout);
    cin>>m>>n;
    n-=17;
    for(int i=0;i<m;i++)
    {
        scanf("%d",&x[i]);
    }
    sort(x,x+m);
    if(n<0)n=0;
    else
    {
        ans=1;
        cl(0,0,1);
    }
    cout<<ans;
    return 0;
}

清清正正射命丸文是也~

时间: 2024-12-16 18:48:59

再数17的相关文章

有17个人围成一圈(编号为0~16),从第 0号的人开始从 1报数, 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。 问此人原来的位置是多少号?

void main() { int a[17] = { 0 };//代表17个人,值为0代表还在,1代表离开 int baoshu = 1;//当前报数的数字,最多49 int total = 17;//当前还剩多少人在 int cur = 0;//17个人的当前人循环到的编号 while (total!=1) { if (cur == 17)//说明已经走到下一圈了,需要保证当前人的编号 { cur = 0; } if (a[cur] == 1)//说明该人已经离开圈子,报数不增加,走向下一人

给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题

题目:给定一个十进制数M,将其转化为N进制数,其中2<=N<=16,其中N为32为整型数; 输入:M N,如7 2 输出转化结果:111 注意点:考虑负数的情况,记得添加负号: 思路:1. 使用一个辅助栈来存放M对N取余的结果(M%N):   2. 处理余数<=9和>9两种情况,因为按照16进制,>9的数用ABCDEF取代   3. 再更新取余后M的取值:M=M/N:   4. 循环处理2,3两个步骤,直到M=0: 5. 处理最终结果,出栈,直到栈为空: 代码如下: pack

[技巧篇]17.那些年一直再逃避的问题,还债Web阶段!

四海行唐的一阶段和二阶段的时候,再使用数据的时候总是使用List<Map<String,Object>>的东西,但是胖先生一直不怎么喜欢! 所以我再凌云17的Web阶段的时候,使用了从前端表单提交数据,直接再Servlet变成对象,后台从数据库查询的数据也直接编程对象,例如List<User> 形式 我们没有自己去写ORM框架,而是再现有的开源的基础上来搞定,因为再Web阶段说ORM是一种比较扯的,风险比较大! 一开始的时候,我们使用先使用实例化号对象,再通过 requ

LeetCode Count and Say 数数字

1 class Solution { 2 public: 3 string countAndSay(int n) { 4 if(n==1) return "1"; 5 string str0="",str1="1"; 6 int i,t,count; 7 char c='*'; 8 for(i=0;i<n-1;i++){ //一共要数n-1次,假如n=2,那么只要数str1这一次就行了 9 count=1; 10 if(i%2!=0){ /

使用selenium找出外卖点餐次数最多的10个顾客

大锅在做外卖,给我说能否统计出这半年点餐次数最多的10个顾客,我不知道APP本身是否有这个功能,想了下最近用selenium较多,就用selenium尝试下吧. 1 定义一个类,这里先描述需要的属性和方法,后面再依次具体分析: 1 class Order: 2 def __init__(self, url, username, password): 3 # URL以及用户名和密码 4 self.url = url 5 self.username = username 6 self.passwor

C++ Primer Plus 文章17章 进,输出和文件

文章17章 进.输出和文件 1.当到达输入句子.他将刷新输出缓冲区满输出电流 2.streambuf分类 它提供了用于各种操作的一个缓冲 ios_base类表示流的一般特征 ios基础的类ios_base.它包括一个点streambuf对象的指针 ostream类从ios派生.提供可输出方法 istream类从ios派生,提供可输入方法 iostream类基于ostream和istream,继承了输入和输出方法 3.包括iostream则自己主动创建了8个流对象 cin 标准输入 wcin 宽字

C++ Primer Plus 第17章 输入,输出和文件

第17章 输入.输出和文件 1.当到达输入语句时,他将刷新输出缓冲区中当前所有的输出 2.streambuf类 提供了对缓冲区的各种操作 ios_base类表示流的一般特征 ios类基于ios_base,包含了一个指向streambuf对象的指针 ostream类从ios派生,提供可输出方法 istream类从ios派生,提供可输入方法 iostream类基于ostream和istream,继承了输入和输出方法 3.包含iostream则自动创建了8个流对象 cin 标准输入 wcin 宽字符流

再致总理一封信 - 我要替中国独立游戏说句话

总理您好, 我是上海巨斧网络的陈宇,是一名普通的手游从业者. 国家新闻出版广电总局针对手游市场出台了一条新政,即2016年7月1日起,所有手机游戏需要广电总局审批才可上架. 这件事在业内引发了强烈的反响,中小企业哀嚎一片,广州天海网络的喻平也给您写了两封公开信,算上我这封已经是第三封了,虽然不知道这些信能不能传到您手里,但该政策着实影响到了万千的中国独立开发者,因此我有一些话必须得说. 一.什么是独立游戏? 一般意义上对独立游戏的定义,是指相对于商业游戏制作而存在的另一种游戏制作行为,在没有商业

笔试算法题(20):寻找丑数 &amp; 打印1到N位的所有的数

出题:将只包含2,3,5的因子的数称为丑数(Ugly Number),要求找到前面1500个丑数: 分析: 解法1:依次判断从1开始的每一个整数,2,3,5是因子则整数必须可以被他们其中的一个整除,如果不包含任何其他因子则最终的结果为1: 解法2:小丑数必然是某个大丑数的因子,也就是乘以2,3,或者5之后的值,所以可以利用已经找到的丑数来寻找下一个丑数,使用数组有序保存已经找到的丑 数,并且当前最大丑数值为M:用大于M/2的丑数乘以2得到M1,用大于M/3的丑数乘以3得到M2,用大于M/5的丑数