承接一下洛咕上的题解,这里基本就是谈谈优化,放个代码的 我们发现这里的常数主要来自于除法,那么我们优化除法次数,把所有的 \(n/1...n/s\) (\(s=\sqrt n\))存下来,然后归并排(其实就是 merge 一下),最后 unique 去个重,然后就可以进行小常数的数论分块了 //by Judge #pragma GCC optimize("Ofast") #include<bits/stdc++.h> #define Rg register #define…
首先转化为ans=所有的组合方式 - 在同一水平/竖直线上 - 在同一斜线上 主要考虑在同一斜线上的情况 首先想到枚举斜率然后在坐标系内平移,以(0,0)为起点,每条线上的点数应该是gcd(x,y)比较好理解 所以在这条线段上有gcd(x,y)-1个选择方式(已选(0,0).(x,y)) 可向下/右移动的空间是 n-x.m-y比较显然,所以都乘起来即为贡献 #include<iostream> #include<cstdio> #include<cstring> #de…
题目链接:http://poj.org/problem?id=3233 Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. Input The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30…
题面 解析 一开始以为这题很难的... 其实只要设\(d\)为\(a\)的最大公因数, 即\(a[i]=s[i]*d\), 因为\(n=\sum_{i=1}^{n}a[i]=\sum_{i=1}^ns[i]*d=d*\sum_{i=1}^ns[i]\). 所以\(d\)一定是\(n\)的约数, 因此从大到小枚举\(d\), 判断能否构造\(k\)个\(s[i]\)就行了. 判断也很简单, 只要\(\sum_{i=1}^ki=(k+1)*k/2<=n/d\), 然后将\(s[i=1\)~\(k-1…
P1829 [国家集训队]Crash的数字表格 / JZPTAB 题意:求 \({\rm S}(n,m)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m{\rm lcm}(i,j)\) ,对 \(20101009\) 取模. \(x/y\) 等价于 \(\left\lfloor \dfrac xy \right\rfloor\) ,并且设 \(n\le m\) \[\begin{aligned} \sum_{i=1}^n\sum_{j=1}^m{\rm lcm}(i…
题目大意:给你N和K,问有多少个数对满足gcd(N-A,N)*gcd(N-B,N)=N^K.题解:由于 gcd(a, N) <= N,于是 K>2 都是无解,K=2 只有一个解 A=B=N,只要考虑K=1的情况就好了其实上式和这个是等价的gcd(A,N)*gcd(B,N)=N^K,我们枚举gcd(A,N)=g,那么gcd(B,N)=N/g.问题转化为统计满足 gcd(A, N)=g的A的个数.这个答案就是 ɸ(N/g),只要枚举 N 的 约数就可以了.答案是 Σɸ(N/g)*ɸ(g)(g|N)…
GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3559    Accepted Submission(s): 1921 Problem Description The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes writ…
A. Vicious Keyboard 题意:给你一个字符串,里面只会包含VK,这两种字符,然后你可以改变一个字符,你要求VK这个字串出现的次数最多. 题解:数据范围很小,暴力枚举改变哪个字符,然后check就好. #include<bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; int ans = 0; for(int i=0;i<s.size();i++){ if(s[i]=='V'){…
题目描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. 样例输入 1 5 30 60 20 20 20 样例输出 80 题解 暴力 由于$\gcd$具有结合律,所以如果$\gcd(a,b)$比$a$小,那么至少小了一半. 所以所有以一个数为右端点的区间中,本质不同的$\gcd$个数只有$\log a$个. 于是从左向右枚举右端点,统计出以该点为右端点的所有$\gcd$以及区间长度,统计…
题面: 给一个序列,求最长的合法区间,合法被定义为这个序列的gcd=区间最小值 输出最长合法区间个数,r-l长度 接下来输出每个合法区间的左端点 题解: 由于区间gcd满足单调性,所以我们可以二分区间长度,用st表维护区间最小值和gcd即可 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #define N 300100 using namespace std; i…