Codeforces 1008D/1007B
题意略。
思路:
由于这个长方体是可以翻转的,所以我们不必考虑小长方体3个维度的出处,反正3条边一定有长有短能分出大小。
现在我们来考虑A,B,C三个数字,如果它们3个产生的因子互不相同,分别产生了a,b,c个因子,那么本题的答案就是a * b * c。
可是在现实中,这三个数字是会产生重合的因子的,也就是说a,b可能有公共部分,如果此时我们还将a和b相乘,那么我们会给答案带来增解。
现在我们将因子分成a,b,c,ab,bc,ac,abc这7种互不重叠,而并集却又是所有因子的个数的情况。
我们为小长方体选择的3维的因子出处分别为 [a,ab,ac,abc],[b,ab,bc,abc],[c,ac,bc,abc]。
当我们的因子没有选到同一区域内时,我们直接相乘即可,否则我们就要选择特殊的计算方法来解决。
这个题目在这里有一定容斥的思想。即便我们分类区域,但是由于有一些区域是共用的,所以还是会产生重复,这里用hash来去重。
同时要注意这题的实现技巧。
详见代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5 + ;
const int a = ;
const int b = ;
const int c = ;
const int ab = ;
const int bc = ;
const int ac = ;
const int abc = ; LL cnt[maxn],numb[];
int store[];
vector<int> va,vb,vc;
set<LL> st; void init(){
for(int i = ;i < maxn;++i)
for(int j = i;j < maxn;j += i)
cnt[j] += ; va.push_back(a);
va.push_back(ab);
va.push_back(ac);
va.push_back(abc); vb.push_back(b);
vb.push_back(bc);
vb.push_back(ab);
vb.push_back(abc); vc.push_back(c);
vc.push_back(ac);
vc.push_back(bc);
vc.push_back(abc);
}
LL cal2(LL x){
return x + x * (x - ) / ;
}
LL cal3(LL x){
return x + x * (x - ) + x * (x - ) * (x - ) / ;
}
LL gcd(LL a,LL b){
return b == ? a : gcd(b,a % b);
} int main(){
init();
LL T,A,B,C;
scanf("%lld",&T);
while(T--){
st.clear();
scanf("%lld%lld%lld",&A,&B,&C);
LL dab = gcd(A,B),dbc = gcd(B,C),dac = gcd(A,C),dabc = gcd(dab,C);
numb[abc] = cnt[dabc];
numb[ab] = cnt[dab] - numb[abc],numb[bc] = cnt[dbc] - numb[abc],numb[ac] = cnt[dac] - numb[abc];
numb[a] = cnt[A] - numb[ab] - numb[ac] - numb[abc];
numb[b] = cnt[B] - numb[ab] - numb[bc] - numb[abc];
numb[c] = cnt[C] - numb[ac] - numb[bc] - numb[abc]; LL ans = ;
for(int i = ;i < va.size();++i){
for(int j = ;j < vb.size();++j){
for(int k = ;k < vc.size();++k){
store[] = va[i],store[] = vb[j],
store[] = vc[k];
sort(store,store + );
LL hash = ;
for(int u = ;u < ;++u)
hash = hash * + store[u];
if(st.count(hash)) continue;
st.insert(hash);
int one = store[],two = store[],
three = store[];
if(one == two && two == three){
ans += cal3(numb[one]);
}
else if(one == two){
ans += numb[three] * cal2(numb[one]);
}
else if(two == three){
ans += numb[one] * cal2(numb[two]);
}
else if(one == three){
ans += numb[two] * cal2(numb[one]);
}
else{
ans += numb[one] * numb[two] * numb[three];
}
}
}
}
printf("%lld\n",ans);
}
return ;
}
Codeforces 1008D/1007B的更多相关文章
- codeforces 1007B Pave the Parallelepiped
codeforces 1007B Pave the Parallelepiped 题意 题解 代码 #include<bits/stdc++.h> using namespace std; ...
- Pave the Parallelepiped CodeForces - 1007B (计数)
大意: 给定A,B,C, 求有多少个三元组$(a,b,c)$, 满足$a \le b \le c$, 且以若干个$(a,b,c)$为三边的长方体能填满边长(A,B,C)的长方体. 暴力枚举出$A,B, ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
随机推荐
- pymysql指南
1 引言 mysql应该说是如今使用最为普遍的数据库了,没有之一,而Python作为最为流行的语言之一,自然少不了与mysql打交道,pymysql就是使用最多的工具库了. 2 创建库.表 我们先从创 ...
- 数组(ArrayPool数组池、Span<T>结构)
前言 如果需要使用相同的类型的多个对象,就可以使用集合和数组,这一节主要讲解数组,其中会重点涉及到Span<T>结构和ArrayPool数组池.我们也会先涉及到简单的数组.多维数组.锯齿数 ...
- python基础——列表(list)
序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...
- 基于V2EX API的nodejs组件.
今天又学习到了新的知(zi)识(shi),来给自己做个笔录,也算在这酷热的天气里给自己写了一篇降温的‘膏药’,话就讲这么多了 ,start off...... 首先 ,依赖选择: /**设置为严格模式 ...
- (12)ASP.NET Core 中的配置二(Configuration)
1.内存配置 MemoryConfigurationProvider使用内存中集合作为配置键值对.若要激活内存中集合配置,请在ConfigurationBuilder的实例上调用AddInMemory ...
- File signature analysis fails to recognize .old file
My friend May she found a strange file called "bkp.old" as below in the evidence files. Sh ...
- Apache Flink 1.9 重大特性提前解读
今天在 Apache Flink meetup ·北京站进行 Flink 1.9 重大新特性进行了讲解,两位讲师分别是 戴资力/杨克特,zhisheng 我也从看完了整个 1.9 特性解读的直播,预计 ...
- HttpClientFactory 使用说明 及 对 HttpClient 的回顾和对比
目录 HttpClient 日常使用及坑点: HttpClientFactory 优势: HttpClientFactory 使用方法: 实战用法1:常规用法 1. 在 Startup.cs 中进行注 ...
- Java +支付宝 +接入+最全+最佳-实战-demo
一.支付宝配置: 1.需要在支付宝商户平台购买支付的产品并开通支付. 2.购买支付产品登录支付宝:https://auth.alipay.com/login/index.htm 3.登录之后首页点击查 ...
- html的一些基本属性介绍
一.html的属性类型: 1.常见标签属性: a.<h1>:align对其方式 例如:<h1 align="right"> hhhhh</ ...