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 ...
随机推荐
- Reporting报表开发知识合并[个人原创]
[个人原创] ,转发请声明原文链接 了解 a) SSRS全称 SQL Server Reporting Services,是依赖于数据库运行的,是微软开发的重量级别的BI产品 b) ...
- TIJ读书笔记-第21章-并发
一本Think in java,从去年6月份开始读,读了快一年了,也快读完了,然而回头想想,却好像什么也不记得了,好记性不如烂笔头,那就从现在开始记录一下吧.由于现在在读的是并发,那就先从这章开始吧. ...
- 【SVN】eclipse 安装 SVN 插件
链接:eclipse中svn插件的安装 SVN 插件地址:http://subclipse.tigris.org/servlets/ProjectProcess;jsessionid=8EB28B11 ...
- Python 与数据库交互
安装:pip3 install pymysql 引入模块在python3里:from pymysql import * 使用步骤:1.创建Connection对象,用于建立与数据库的连接,创建对象调用 ...
- 大型系列课程之-七夕告白之旅Electron篇
上一篇分享了一下vbs的撩妹攻略,但细心的兄弟会发现,这种脚本式的攻城方案并不得心应手,有很多妹子害怕是病毒根本不敢点击,而且这个脚本界面风格也不漂亮,不能轻易打动妹子的心,怎么破,小编这次在为各位老 ...
- ArrayList 的使用方法【摘要】
ArrayList 的使用方法 1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: (1)动态的增加和减少元素 ...
- ThreadLocal线程隔离
package com.cookie.test; import java.util.concurrent.atomic.AtomicInteger; /** * author : cxq * Date ...
- The introduction of the book American daily English notes (enlarged edition)
After reading the book of American daily English notes written by Linkun Yang[1], I think I should a ...
- Mac OS 上的一些骚操作
本帖记录个人在使用 Mac 操作系统上的一些骚操作,不断更新,以飨读者. 快速移动网页到顶部或底部 用双指上下划触摸板吗?NO,我们有更骚的操作: command + ↑ 回到顶部 command + ...
- Java 安全之:csrf攻击总结
最近在维护一些老项目,调试时发现请求屡屡被拒绝,仔细看了一下项目的源码,发现有csrf token校验,借这个机会把csrf攻击学习了一下,总结成文.本文主要总结什么是csrf攻击以及有哪些方法来防范 ...