51nod 1352:集合计数
给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2},{N,1}.求出有多少个集合满足:第一个元素是A的倍数且第二个元素是B的倍数。
提示:
对于第二组测试数据,集合分别是:{1,10},{2,9},{3,8},{4,7},{5,6},{6,5},{7,4},{8,3},{9,2},{10,1}.满足条件的是第2个和第8个。
- 第1行:1个整数T(1<=T<=50000),表示有多少组测试数据。
- 第2 - T+1行:每行三个整数N,A,B(1<=N,A,B<=2147483647)
- 对于每组测试数据输出一个数表示满足条件的集合的数量,占一行。
- 2
- 5 2 4
- 10 2 3
- 1
- 2
显然,需要满足方程A*xx+B*yy=1+N。我的思路是使用扩展欧几里德求出大于零的最小值xx之后,取其remain=N-(xx)*A,再用remain除以A、B的最小公倍数即可。
感觉51nod上的题目对于算法的优化要求很高,很多时候一个不小心出来的结果TLE比WA都多,所以很多地方都要注意算法的时间啊。
代码:
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- long long N,A,B,result,d,z,xx,yy;
- void ex_gcd(long long a,long long b,long long &xx,long long &yy)
- {
- if(b==0)
- {
- xx=1;
- yy=0;
- d=a;
- }
- else
- {
- ex_gcd(b,a%b,xx,yy);
- long long t=xx;
- xx=yy;
- yy=t-(a/b)*yy;
- }
- }
- long long cal2()
- {
- result=0;
- ex_gcd(A,B,xx,yy);
- z=A*B/d;
- if((1+N)%d)
- return 0;
- else
- {
- xx=xx*((1+N)/d);
- long long r=B/d;
- xx = (xx%r+r)%r;
- if(xx==0)
- xx+=r;
- long long remain=N-(xx)*A;
- if(remain<0)
- return 0;
- else
- {
- result++;
- result += remain/z;
- }
- }
- return result;
- }
- int main()
- {
- int count;
- scanf("%d",&count);
- while(count--)
- {
- scanf("%lld%lld%lld",&N,&A,&B);
- cout<<cal2()<<endl;
- }
- return 0;
- }
版权声明:本文为博主原创文章,未经博主允许不得转载。
51nod 1352:集合计数的更多相关文章
- 51Nod 1352 集合计数(扩展欧几里德)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1352 题目大意: 给出N个固定集合{1,N},{2,N-1} ...
- 51Nod 1352 集合计数 扩展欧几里得
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2},{N,1}.求出有多少个集合满足 ...
- 51 Nod 1352 集合计数
大致题意:求ax+by=n+1的正数解的个数. 先看下面: 相信看过了通解的参数表示后已经知道怎么解了,贴代码: #include <bits/stdc++.h> #define ll l ...
- 【BZOJ-2839】集合计数 容斥原理 + 线性推逆元 + 排列组合
2839: 集合计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 229 Solved: 120[Submit][Status][Discuss] ...
- BZOJ 2839: 集合计数 [容斥原理 组合]
2839: 集合计数 题意:n个元素的集合,选出若干子集使得交集大小为k,求方案数 先选出k个\(\binom{n}{k}\),剩下选出一些集合交集为空集 考虑容斥 \[ 交集为\emptyset = ...
- 51nod 1682 中位数计数
1682 中位数计数基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均 ...
- bzoj2839: 集合计数 容斥+组合
2839: 集合计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 523 Solved: 287[Submit][Status][Discuss] ...
- bzoj2839 集合计数(容斥)
2839: 集合计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 883 Solved: 490[Submit][Status][Discuss] ...
- BZOJ 2839: 集合计数 解题报告
BZOJ 2839: 集合计数 Description 一个有\(N\)个元素的集合有\(2^N\)个不同子集(包含空集),现在要在这\(2^N\)个集合中取出若干集合(至少一个),使得 它们的交集的 ...
随机推荐
- Codeforces Round #551 (Div. 2)D(树形DP)
#define HAVE_STRUCT_TIMESPEC#include <bits/stdc++.h>using namespace std;int val[300007],num[30 ...
- PostgreSQL存取jsonb
从PostgreSQL 9.3开始,json就成了postgres里的一种数据类型,也就是和varchar.int一样,我们表里的一个字段的类型可以为json了. 与此同时,postgres还提供了j ...
- SSM 返回静态页面HTML Controller 被递归调用引起的StackOverflowError
一 背景 最近在做工程实践,想实现这么一个效果: 前端url请求地址:localhost:8080/idevtools/search 后端返回一个静态页面HTML:search.html 按照网上说的 ...
- 117、Java中String类之去掉左右空格
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 常用的UI控件
关于本文:作为一名iOS软件工程师,熟练规范的使用常用的UI控件是必备的基础技能. 指示器(UIActivityIndicatorView)----转动的等待小菊花 提醒对话框(UIAlertView ...
- C#往TextBox的方法AppendText加入的内容里插入换行符----转载
C# TextBox换行[huan hang]时你往往会想到直接付给一个含有换行[huan hang]符"\n"的字符[zi fu]串[zi fu chuan]给Text属性[sh ...
- IAR 设置问题
IAR 设置问题 1.worksplace 的设置问题:edit configuration 这样,每个工程都可以有一个workplace,方便切换. 2.文件夹包含问题 3.包含.dat文件问题 . ...
- eclipse js文件无法保存错误
错误信息如下 Save Failedjdk.nashorn.internal.runtime.ECMAException.getEcmaError()Ljava/lang/Object; 网上多番查找 ...
- 注册模块上线前安全测试checklist
许多应用系统都有注册模块,正常用户通过注册功能,获得应用系统使用权限:而非法用户通过注册模块,则是为了达到不可告人的目的,非法用户可以通过注册模块与服务端进行交互(一切用户输入都不可信),因此系统上线 ...
- Lognormal distribution 对数正态分布
转载:https://blog.csdn.net/donggui8650/article/details/101556041 在概率论中,对数正态分布是一种连续概率分布,其随机变量的对数服从正态分布. ...