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

Educational Codeforces Round 86 C - Yet Another Counting Problem(规律+前缀和)

传送门


在这里插入图片描述
1.题目大意:给出一段区间 [ l , r ] [l,r] [l,r]以及两个数 a , b a,b a,b,问区间内的有多少个数 x x x满足 ( x % a ) % b ! = ( x % b ) % a (x\%a)\%b ! = (x\%b)\%a (x%a)%b!=(x%b)%a

2.首先对 [ 0 , 100 ] [0,100] [0,100]内的数打表找规律,尽管答案的区间不包含 0 0 0,但是给出 0 0 0能更浅显的看出规律(比如我这种对找规律不太感冒的人),我们不难发现就是一个裸的循环,循环节的长度为 l c m ( a , b ) lcm(a,b) lcm(a,b)(貌似大部分人推的都是 a ∗ b a*b ab?但我感觉是 l c m ( a , b ) lcm(a,b) lcm(a,b)哇,算了反正都对)

3.显然我们对循环的区间预处理前缀和,后面直接利用前缀和的性质查询。然后重点来了(对我这种蒟蒻来说挺麻烦的)我们究竟是以 [ 0 , l c m ) [0,lcm) [0,lcm)作为循环区间还是使用 [ 1 , l c m ] [1,lcm] [1,lcm]作为循环区间呢?我一眼认定 [ 0 , l c m ) [0,lcm) [0,lcm)是正确的,便去写了,写了之后发现不对,测试了一下当 a , b a,b a,b是倍数关系时,果然出大错,原来当 n % l c m = = 0 n\%lcm==0 n%lcm==0时,前缀数组的下标 0 0 0是被当做 1 1 1来使用的,就出现了错误

4.想了想,假设一段数为111000111000111000…,循环节是 6 6 6,从第一个数开始显而易见,但是从第二个数开始数,每6个循环依然是正确的!那么我们处理 [ 1 , l c m ] [1,lcm] [1,lcm]的正确性就可以保证了

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <math.h>
#include <cstdio>
#include <string>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define lowbit(x) (x&(-x))
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
const double eps=1e-8;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const ll INF=1e18;
const int Mod=1e9+7;
const int maxn=2e5+10;

void print(int a,int b){ //打表代码
    int res[105];
    for(int i=0;i<=100;i++){
        int x=(i%a)%b,y=(i%b)%a;
        if(x==y) res[i]=1;
        else res[i]=0;
    }
    for(int i=0;i<=100;i++){
        int j=i,cnt=1;
        while(res[j]==res[j+1] && j<=100){
            j++;
            cnt++;
        }
        cout<<res[j]<<" "<<cnt<<endl;
        i=j;
    }
}

ll gcd(ll a,ll b){
    return b==0?a:gcd(b,a%b);
}

ll lcm(ll a,ll b){
    return a/gcd(a,b)*b;
}

int sum[maxn];

ll f(ll x,ll n){
    return x/n*sum[n]+sum[x%n];
}

int main(){
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    ll t,a,b,q;
    //print(4,6);
    cin>>t;
    while(t--){
        cin>>a>>b>>q;
        ll l,r,n=lcm(a,b);
        for(int i=1;i<=n;i++){
            ll x=(i%a)%b,y=(i%b)%a;
            sum[i]=sum[i-1]+(x!=y);
        }
        while(q--){
            cin>>l>>r;
            cout<<f(r,n)-f(l-1,n)<<endl;
        }
        cout<<endl;
    }
    return 0;
}




相关文章:

  • SQL Server2005重装Performance Monitor Counter Requirement错误解决
  • UVA1616 Caravan Robbers(二分答案+小数化分数)
  • UVA1619 Feel Good(链表+前缀和)
  • Codeforces Round #637 (Div. 2) D. Nastya and Scoreboard(位运算dfs/记忆化搜索)
  • Cocoa应用程序基本运行过程
  • 我们的内心都有伤痕
  • Codeforces Round #638 (Div. 2) B. Phoenix and Beauty (构造)
  • Codeforces Round #638 (Div. 2) C Phoenix and Distribution(思维/构造)
  • Mac Application GDB Usage
  • “Shopee杯“e起来编程暨武汉大学2020年大学生程序设计大赛决赛
  • iPhone开发秘籍一书中的翻译错误
  • 2020WHU校赛 I - Interesting Matrix Problem(规律+整除分块)
  • UVA1025 A Spy in the Metro (dp)
  • 欢迎大家来这里学习
  • UVA437 The Tower of Babylon(记忆化搜索)
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 3.7、@ResponseBody 和 @RestController
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Angular 响应式表单 基础例子
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • es6(二):字符串的扩展
  • Java的Interrupt与线程中断
  • linux安装openssl、swoole等扩展的具体步骤
  • node-glob通配符
  • orm2 中文文档 3.1 模型属性
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • python学习笔记 - ThreadLocal
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • React16时代,该用什么姿势写 React ?
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端学习笔记之观察者模式
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 使用 @font-face
  • 移动端唤起键盘时取消position:fixed定位
  • 06-01 点餐小程序前台界面搭建
  • const的用法,特别是用在函数前面与后面的区别
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​人工智能书单(数学基础篇)
  • ​如何防止网络攻击?
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1)(1.11) SiK Radio v2(一)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)WCF的Binding模型
  • (五)Python 垃圾回收机制
  • (一)Java算法:二分查找
  • (转)大道至简,职场上做人做事做管理
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .cfg\.dat\.mak(持续补充)
  • .Family_物联网
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net core Swagger 过滤部分Api
  • .NET Micro Framework 4.2 beta 源码探析