HPU 第三次积分赛:阶乘之和(水题)
階乘之和
描述
對于整數pp,給出以下定義
p=x_{1}!+x_{2}!+x_{3}!+...+x_{q}!(x_{i}<x_{j}for\ all\ i<j )p=x1?!+x2?!+x3?!+...+xq?!(xi?<xj?for?all?i<j)且x_{i} \neq 0xi?≠0
((注釋:p等于多個數的階乘和,并且x_{1},x_{2},x_{3},...,x_{q}x1?,x2?,x3?,...,xq?為不相等的任意正整數,即組成p的階乘不重復使用))
給定兩個整數x,y,判斷二者是否能滿足以上定義。若二者都滿足定義,設x由k_{1}k1?個數的階乘和組成,y由k_{2}k2?個數的階乘和組成,若k_{1}=k_{2}k1?=k2?,按下述輸出格式輸出二者的定義形式((輸出時,階乘按遞增形式輸出,例如:7=1!+3!))。
輸入
第一行輸入一個整數T,代表T組測試數據。(1\leq T \leq 10000)(1≤T≤10000)
接下來T行,每行包含兩個整數x,y。(1\leq x,y \leq 10^{18})(1≤x,y≤1018)
輸出
對于每組x,y輸出包含兩部分:
①如果二者都滿足以上定義,輸出“SEYES”;如果只有其一滿足以上定義,輸出“YNEOS”;如果二者都不滿足以上定義,則輸出“ONO”。
②當x,y都滿足以上定義且k_{1}=k_{2}k1?=k2?時,輸出二者的定義形式。否者輸出“dWvWb”。
輸入樣例 1?
4 7 7 1 2 4 2 4 4輸出樣例 1
Case 1:SEYES 7=1!+3! 7=1!+3! Case 2:SEYES 1=1! 2=2! Case 3:YNEOS dWvWb Case 4:ONO dWvWb一道水題。一開始受Codeup 1085這道題的影響,一直從正向考慮,導致沒有準確的思路。然后用了dfs,果斷超時,加了剪枝之后時間并沒有降下來QAQ,最后看了一下別人提交的代碼,好短的代碼長度,好快的運行時間QAQ。果斷放棄之前的思路,從逆向考慮,馬虎了一次后第二次就過了。
沒想到這個題能卡三個小時,WA6發,果然前期太猛后期就萎了
AC代碼
#include <bits/stdc++.h> #define ll long long #define ms(a) memset(a,0,sizeof(a)); #define pi acos(-1.0) #define INF 0x3f3f3f3f using namespace std; const int maxn=1e6+10; const double E=exp(1); ll a[maxn]; int b[maxn]; int c[maxn]; int vis[maxn]; int vis1[maxn]; int main(int argc, char const *argv[]) {ios::sync_with_stdio(false);a[1]=1;// 打表記錄階乘for(int i=2;i<=20;i++)a[i]=a[i-1]*i;int t;int xx=0;cin>>t;ll x,y;while(t--){cin>>x>>y;ll X=x;ll Y=y;int flag1=0,flag2=0;int o1=0;int o2=0;ms(vis);while(X){for(int i=20;i>=1;i--){if(X>=a[i]){b[o1++]=i;vis[i]++;}if(X==0){flag1=1;break;}}}while(Y){for(int i=20;i>=1;i--){if(Y>=a[i]){vis1[i]++;c[o2++]=i;}if(Y==0)flag2=1;}}sort(b,b+o1);sort(c,c+o2);int O1=o1,O2=o2;// 去一下重吧,不知道為什么不去重會有重復元素o1=unique(b,b+o1)-b;o2=unique(c,c+o2)-c;if(o1!=O1)flag1=0;if(o2!=O2)flag2=0;cout<<"Case "<<++xx<<":";if(flag1+flag2==0)cout<<"ONO\n"<<"dWvWb"<<endl;if(flag1+flag2==2){cout<<"SEYES"<<endl;if(o1!=o2)cout<<"dWvWb"<<endl;else{cout<<x<<"=";for(int i=0;i<o1;i++){if(i)cout<<"+";cout<<b[i]<<"!";}cout<<endl;cout<<y<<"=";for(int i=0;i<o2;i++){if(i)cout<<"+";cout<<c[i]<<"!";}cout<<endl;}}if(flag2+flag1==1)cout<<"YNEOS\n"<<"dWvWb"<<endl;}return 0; }?
轉載于:https://www.cnblogs.com/Friends-A/p/10324410.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的HPU 第三次积分赛:阶乘之和(水题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刺激战场四人开黑名字
- 下一篇: [转]caffe中solver.prot