整体思路 对于任意的p,q,r,可能使得p*q=r的最小进制应该是p,q,r三个数的所有数位中最大的数字+1,例如,6,9,42三个数中所有数位中最大的数字是9,故可能成立的最小进制是9+1,即10.题目告诉我们,最大进制B<=16,这就确定了进制的最小范围. 我们设计以下函数来简化程序流程: int minB(),根据p,q,r计算最小进制 int nBto10(int num, int B),将B进制的数字num转化为10进制数 bool test(int B),测试p,q,r在进制B条件下
C2 首先用并查集维护\(1\)的连通块,然后用另外一个并查集维护第\(i\)行中,第\(j\)列之后的第一个\(0\)的位置,就是如果当前位置是\(1\)那么它的父亲是它右边的格子,否则是它自己. 时间复杂度\(O(nm\log m+nq)\). #include<bits/stdc++.h> #define Rint register int using namespace std; const int N = 1003, d[2][4] = {{0, 1, 0, -1}, {1, 0,
A 题目链接:http://www.ifrog.cc/acm/problem/1111 分析:容易发现本题就是排序不等式, 将A数组与B数组分别排序之后, 答案即N∑i=1Ai×Bi 此题有坑,反正据我提交而言,一直RE,之后发现两个地方会出错,一是定义数组要放在main函数之前,第二是ans+=1LL*a[i]*b[i],如果少了1LL,结果肯定WA,这就是此题的亮点所在! #include <bits/stdc++.h> using namespace std ; typedef long