日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爱摸鱼的Dillonh

發布時間:2024/10/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爱摸鱼的Dillonh 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://ac.nowcoder.com/acm/contest/318/E

C++版本一

題解:

這是一個考驗數學思維的題目。
當滿足條件的集合內只有兩個數的時候,要么n=a*a,要么n=a*(a-1),我們可以直接對n進行開根號運算,令cnt1 = ceil(sqrt(n)),cnt2 = floor(sqrt(n)),然后判斷cnt1 *cnt2 是否等于n即可。當滿足條件的集合內有大于等于三個數的時候,我們可以知道n = a * a * a * ... * (a-1)*...*(a-1)。當a取到最大值時,應該滿足n = a * a * a,而n是小于等于1e18的,所以我們可以知道a是小于等于1e6的,所以我們就可以暴力對a進行枚舉了,每次驗證一下是否合法即可。
對于輸出“-1”的情況,也就只有當n=1,或者n=2^k的時候會成立,此時n可以分解為k個2和無數個1相乘的形式,故有無數個集合。最后再按要求處理一下輸出就可以了。

#include <bits/stdc++.h> #define fi first #define se second #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define pb push_back #define MP make_pair #define lowbit(x) x&-x #define clr(a) memset(a,0,sizeof(a)) #define _INF(a) memset(a,0x3f,sizeof(a)) #define FIN freopen("in.txt","r",stdin) #define IOS ios::sync_with_stdio(false) #define fuck(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int>pii; const int MX = 1e6 + 5; const int N = 1e6;vector<ll> ver[MX];int main() {// FIN;int cas = 1;ll n; int T;cin >> T;while (T--) {scanf("%lld", &n);bool flag = 1;for (int i = 0; i < 64; i++) {if ((1ll << i) == n) {flag = 0;break;}}printf("Case #%d:\n", cas++);if (!flag) {puts("-1");continue;}ver[0].pb(n);int num = 1;ll cnt = (ll)sqrt(n);if (cnt * cnt == n) {ver[num].pb(cnt);ver[num].pb(cnt);num++;}if (cnt * (cnt + 1) == n) {ver[num].pb(cnt);ver[num].pb(cnt + 1);num++;}for (int i = 2; i <= N; i++) {if (i == cnt) continue;if ((ll)i * i * i > n) break;ll now = n;int num1 = 0, num2 = 0;if (now % i == 0) {while (now % i == 0) now /= i, num1++;;while (now % (i + 1) == 0) now /= (i + 1), num2++;if (now == 1 && num1 > 0) {for (int j = 0 ; j < num1; j++) ver[num].pb(i);for (int j = 0; j < num2; j++) ver[num].pb(i + 1);num++;}}}for (int i = 0; i < num; i++) {for (int j = i + 1; j < num; j++) {if (ver[i].size() > ver[j].size()) swap(ver[i], ver[j]);}}printf("%d\n", num);for (int i = 0; i < num; i++) {int sz = ver[i].size();printf("%d ", sz);for (int j = 0; j < sz; j++)printf("%lld%c", ver[i][j], " \n"[j == sz - 1]);ver[i].clear();}}return 0; }

C++版本二?

#include <iostream> #include<stdio.h> #include <string.h> #include<set> #include<bits/stdc++.h> using namespace std; struct node {long long a,b,c,d; }; node s[105]; void init() {for(int i=0;i<105;i++){s[i].a=-1;s[i].b=-1;s[i].c=-1;s[i].d=-1;} } int main() {int t;cin>>t;long long x;for(int cas=1; cas<=t; cas++){int flag=1;init();scanf("%lld",&x);long long yu=x;printf("Case #%d:\n",cas);if((yu&(yu-1))==0)flag=0;for(double i=2.0; i<=68.0; i=i+1.0){long long num=x;long long num1=0,num2=0;long long p=(long long )(pow((double)x,1.0/i));long long q=(long long )(pow((double)x,1.0/i))+1;if(p==1)break;if(q==1)break;while(num%p==0)num/=p,num1++;while(num%q==0)num/=q,num2++;if(num==1){int k=(int)i;s[k].a=(num1);s[k].b=(p);s[k].c=(num2);s[k].d=(q);}}int su=0;int biaoji[1000];memset(biaoji,0,sizeof(biaoji));if(flag){for(int i=0; i<105; i++){if((s[i].a!=-1||s[i].c!=-1)&&biaoji[s[i].a+s[i].c]==0){su++;biaoji[s[i].a+s[i].c]=1;}}}memset(biaoji,0,sizeof(biaoji));if(flag){printf("%d\n",su+1);printf("1 %lld\n",(long long )x);for(int i=0; i<105; i++){if((s[i].a!=-1||s[i].c!=-1)&&biaoji[s[i].a+s[i].c]==0){printf("%lld",s[i].a+s[i].c);biaoji[s[i].a+s[i].c]=1;for(int j=0; j<s[i].a; j++)printf(" %lld",s[i].b);for(int j=0; j<s[i].c; j++)printf(" %lld",s[i].d);printf("\n") ;}}}elseprintf("-1\n");}}

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的爱摸鱼的Dillonh的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。