阶乘之和

描述

对于整数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;
}

HPU 第三次积分赛:阶乘之和(水题)的更多相关文章

  1. HPU第三次积分赛-D:Longest Increasing Subsequence(DP)

    Longest Increasing Subsequence 描述 给出一组长度为n的序列,a1​,a2​,a3​,a4​...an​, 求出这个序列长度为k的严格递增子序列的个数 输入 第一行输入T ...

  2. CCF 201512-1 数位之和 (水题)

    问题描述 给定一个十进制整数n,输出n的各位数字之和. 输入格式 输入一个整数n. 输出格式 输出一个整数,表示答案. 样例输入 20151220 样例输出 13 样例说明 20151220的各位数字 ...

  3. nyoj 91 阶乘之和

    点击打开链接 阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度: 描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2 ...

  4. nyoj 91 阶乘之和(贪心)

    阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3! ...

  5. ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)

    1061: 从三个数中找出最大的数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 124[Submit][Status][We ...

  6. ytu 1064: 输入三个字符串,按由小到大的顺序输出(水题,字符串处理)

    1064: 输入三个字符串,按由小到大的顺序输出 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 471  Solved: 188[Submit][Sta ...

  7. ACM 阶乘之和

    阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3! ...

  8. 阶乘之和--nyoj91

    描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No: 输入 第一行有一个整数0<m<10 ...

  9. AC日记——阶乘之和 洛谷 P1009(高精度)

    题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...

随机推荐

  1. Use a layout_width of 0dip instead of fill_parent for better performance

    安装了最新的ATD 18之后,新加的Lint Warnings插件会给我们检测出许多xml布局中不当的地方,例如: Use a layout_width of 0dip instead of fill ...

  2. 1.python+selenium利用cookie,跳过验证码直接登录

    方法1 在登录时,叫代码等待一段时间,然后手动输入验证码 # coding:utf-8 from selenium import webdriver import time url = 'http:/ ...

  3. English trip -- VC(情景课)2 B Classroom objects

    Vocabulary focus 核心词汇 Listen and repeat. 听并跟读 1. a dictionary 2. paper 3. a pen 4. a ruler 5. a stap ...

  4. 4-1 contag_tag:返回HTMLtag.

    jquery已经过时,做一遍,了解其他知识点. contag_tag(name, content_or_options_with_block = nil, options = nil, &bl ...

  5. 启动Eclipse时发生An internal error occurred during: "Initializing Java Tooling"错误

    详细提示如下: An internal error occurred during: "Initializing Java Tooling". Illegal exception ...

  6. Non-parseable POM 解决方法

     两个build放在一起当然不行,把它们类似这样的合并起来.

  7. bzoj4025: 二分图 lct

    题意:带增删边的查询二分图 题解:因为二分图肯定带奇环,lct维护,每次要加入一条边之前判断会不会构成环,如果会就把最先会删除的边删掉,然后如果是奇环就打个标记,然后把奇环数++,删除的时候,把标记删 ...

  8. linux-网络使用

    linux网络的基本使用 "ifconfig" 查看已经被激活的网卡详细信息 "ifconfig eth0" 查看特定的网卡信息 [root@ssgao ~]# ...

  9. js打开、关闭页面和运行代码那些事

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  10. 4.16复杂级数的前n项和

    注意:实际编程中要注意变量类型的选取. #include <iostream> #include<cstdio> using namespace std; int main() ...