什么?这题是枚举吗?
2026-10-26 21:52:55
发布于:吉林
6阅读
0回复
0点赞
我以为的这道题:
- 高难数学公式
- 顶级思维难关
- 史诗级代码量
于是,我以我的聪明才智,成功的,推导出了,一种需要写100多行代码而且时间复杂度还不怎么比枚举快的方法。
接下来,请大家欣赏,我的精心巨著:
#include<bits/stdc++.h>
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#define please return
#define AC 0;
using namespace std;
int n,a,b,c,d,x,y;
int nm,now;
long long ans=1;
unordered_map<int,pair<int,int>>mp;
unordered_map<int,int>m;
int main(){
// freopen("data.in","r",stdin);
// freopen("user.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
while(n--){
cin>>a>>b>>c>>d;
x=a/b,y=d/c;
nm=y;
m.clear();
mp.clear();
for(int i=2;i*i<=y;i++){
now=0;
while(nm%i==0){
now++;
nm/=i;
}
if(now>0) mp[i]={now,now};
}
if(nm>1) mp[nm]={1,1};
nm=c;
for(int i=2;i*i<=c;i++){
now=0;
while(nm%i==0){
now++;
nm/=i;
}
if(now==0) continue;
if(mp.find(i)==mp.end()) mp[i]={0,now};
else mp[i]={mp[i].first+now,mp[i].first+now};
}
if(nm>1){
if(mp.find(nm)==mp.end()) mp[nm]={0,1};
else mp[nm]={mp[nm].first+1,mp[nm].first+1};
}
nm=b;
for(int i=2;i*i<=b;i++){
now=0;
while(nm%i==0){
now++;
nm/=i;
}
if(now==0) continue;
if(mp.find(i)==mp.end()){
cout<<0<<'\n';
goto endd;
}else{
m[i]=now;
if(mp[i].second<now){
cout<<0<<'\n';
goto endd;
}else mp[i].first=max(mp[i].first,now);
}
}
if(nm>1){
m[nm]=1;
if(mp.find(nm)==mp.end()){
cout<<0<<'\n';
goto endd;
}else{
if(mp[nm].second<1){
cout<<0<<'\n';
goto endd;
}else mp[nm].first=max(mp[nm].first,1);
}
}
nm=x;
for(int i=2;i*i<=x;i++){
now=0;
while(nm%i==0){
now++;
nm/=i;
}
if(now==0) continue;
if(m.find(i)!=m.end()) now=m[i];
else now=0;
if(mp.find(i)!=mp.end()){
if(mp[i].first>now){
cout<<0<<'\n';
goto endd;
}else mp[i].second=min(mp[i].second,now);
}
}
if(nm>1){
if(m.find(nm)!=m.end()) now=m[nm];
else now=0;
if(mp.find(nm)!=mp.end()){
if(mp[nm].first>now){
cout<<0<<'\n';
goto endd;
}else mp[nm].second=min(mp[nm].second,now);
}
}
ans=1;
for(unordered_map<int,pair<int,int>>::iterator it=mp.begin();it!=mp.end();it++){
ans=ans*(it->second.second-it->second.first+1);
}
cout<<ans<<'\n';
endd:;
}
please AC
}
hyw
感觉自己既聪明又傻
这里空空如也







有帮助,赞一个