博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1352 集合计数
阅读量:5344 次
发布时间:2019-06-15

本文共 1354 字,大约阅读时间需要 4 分钟。

给出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个。

Input
第1行:1个整数T(1<=T<=50000),表示有多少组测试数据。第2 - T+1行:每行三个整数N,A,B(1<=N,A,B<=2147483647)
Output
对于每组测试数据输出一个数表示满足条件的集合的数量,占一行。
Input示例
25 2 410 2 3
Output示例
12

求有多少个{x,Y} > 0 使的 A*X+B*Y = n+1,扩展欧几里得,先求的一个A*X+B*Y = n+1   使X最小Y最大,然后计算。

1 #include 
2 #define ll long long 3 using namespace std; 4 5 void exgcd(ll a, ll b,ll &d, ll &x, ll &y) { 6 if(!b){ 7 d = a; 8 x = 1; y = 0; 9 }else{10 exgcd(b, a%b, d, y, x);11 y -= x*(a/b);12 }13 }14 15 int main() {16 int t;17 scanf("%d", &t);18 while(t--) {19 ll a, b, x, y, n, d;20 scanf("%lld%lld%lld",&n,&a,&b);21 exgcd(a,b,d,x,y);22 n++;23 if(n%d) {24 printf("0\n");25 continue;26 }27 a /= d; b /= d;28 x *= n/d; y *= n/d;29 ll xx = (x-(x/b)*b);30 ll yy = (y+(x/b)*a);31 if(xx <= 0) xx += b, yy -= a;32 // printf("%lld %lld\n",xx,yy );33 if(xx > n || yy <= 0) printf("0\n");34 else printf("%lld\n",min((n-xx)/b+((n-xx)%b?1:0),yy/a+((yy%a)?1:0)));35 }36 return 0;37 }

 

转载于:https://www.cnblogs.com/xingkongyihao/p/9573475.html

你可能感兴趣的文章
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
Solr4.8.0源码分析(5)之查询流程分析总述
查看>>
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
selenium-窗口切换
查看>>
使用vue的v-model自定义 checkbox组件
查看>>
[工具] Sublime Text 使用指南
查看>>
Hangfire在ASP.NET CORE中的简单实现方法
查看>>
Algorithm——何为算法?
查看>>
Web服务器的原理
查看>>
常用的107条Javascript
查看>>