当前位置: 首页 > news >正文

CF C. Candy Store

原题链接:Problem - C - Codeforces

题意:多测,先给出n代表n种糖果,每种糖果分别给出数量和单价,可以将糖果平均分成若干袋,每一袋的的价格是一袋糖果数量×单价,对于每一种糖果都求出一袋的价格,对于每种糖果都需要用标签贴出一袋的价格,但是如果相邻的糖果价格相同,那么就可以用一个标签来代表价格,问最少使用几个标签。

思路:如果一段糖果价格是一样的,那么设置价格为cost。因为每一袋糖果的价格都是由数量和单价相乘构成的,所以cost%单价=0,所以cost是这一段单价的最小公倍数。但是知道了价格没有用,还需要考虑真的可以让每一袋的价格都是cost吗?每一种糖果的数量%一袋子糖果的数量=0,这个公式上下同时成单价,那么下面就变成了cost。所以一段糖果可以使用一个标签,那么每种糖果的总价是数量×单价,总价%cost=0,这就意味着,这一段的最小公约数%cost=0。因为cost是单价的最小公倍数,所有如果一段糖果的总价最小公约数%单价的最小公倍数=0,那么就可以使用一个标签来表示这一段糖果。

//冷静,冷静,冷静
//调不出来就重构
//#pragma GCC optimize(2)
//#pragma GCC optimize("O3")
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pii;
const int N=1e6+10,mod=1000000007;
ll a[N],b[N];
ll lcm(ll x,ll y)
{return x*y/__gcd(x,y);
}
void Jiuyuan()
{ll n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i]>>b[i];ll llcm=b[1],lgcd=a[1]*b[1];ll ans=1;for(int i=2;i<=n;i++){ll va=lcm(llcm,b[i]),vb=__gcd(lgcd,a[i]*b[i]);if(vb%va==0){llcm=va;lgcd=vb;continue;}ans++;llcm=b[i];lgcd=a[i]*b[i];}cout<<ans<<endl;
}
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ll T=1;cin>>T;while(T--){Jiuyuan();}return 0;
}


http://www.mrgr.cn/news/16512.html

相关文章:

  • 如何接收请求数据
  • 用Starbound星际边界服务器开服联机
  • 网优学习干货:2.6G仿真操作(2)
  • kerberos 认证流程-理解
  • [国家新闻出版署]网络游戏防沉迷实名认证系统接口对接实例(Java版)
  • 让电脑屏幕保持常亮
  • keil5烧录后不自动复位和Flash Download failed - “Cotex-M3“报错解决
  • 使用python导出Excel表格中的lua配置
  • 掌握EF Core:全方位面试指南,助你从初级到高级轻松晋级
  • C++单例模式与特殊类的设计
  • Java面试自我介绍
  • 每日一题——第六十八题
  • 指针空值类型-nullptr
  • 51单片机.之i2c读写eproom
  • 单门店共享自习室小程序系统源码搭建对接门禁和空开api
  • 深入理解并实现——归并排序【C语言】
  • ChatTTS 长音频合成和本地部署2种方式,让你的“儿童绘本”发声的实战教程(文末有福利)
  • 前胡基因组与伞形科香豆素的进化-文献精读42
  • 线性查找表的应用:用户登录注册程序
  • Scala之父Martin Odersky作序推荐的Scala速学版(第3版)出版