阶乘之和

描述

对于整数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. TTFB

    TTFB    Time To First Byte 1.含义 最初的网络请求被发起”到“从服务器接收到第一个字节前”所花费的毫秒数 包含了 TCP连接时间,发送HTTP请求时间和获得响应消息第一个字 ...

  2. 【Mac】小技巧:实现ssh服务器别名免密登录

    前言 我们平常使用ssh user@host然后输入密码的方式来远程链接一个服务器,但是,如果要管理的服务器太多,记住这些服务器的IP和用户名.密码就是一个复杂的工作.当然,我们可以把这些信息用文档记 ...

  3. English trip -- Phonics 5 元音字母 o

    Vowel 元音 元音 O Consonant 辅音 清辅音   h    wh 浊辅音  m    wh  n   ng   y oa:[əʊ]  # 字母本身音 coat boat load co ...

  4. Python在七牛云平台的应用(二)图片瘦身

    (一)七牛云平台的图片瘦身功能简介:(引用自官网) 针对jpeg.png格式图片 瘦身后分辨率不变,格式不变. 肉眼画质不变. 图片体积大幅减少,节省 CDN 流量 官网给的图片压缩率很高,官网给的「 ...

  5. CoderForce 141C-Queue (贪心+构造)

    题目大意:一个队伍,每个人只记得前面比他高的人的个数x.现在将队伍散开,问能否构造出一支满足条件的队伍,如果能,再给每个人一个满足题意的身高. 题目分析:一个一个排,x越少越先排,如果x比已经排好的人 ...

  6. 使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传

    package org.caeit.cloud.dev.util; import java.io.File; import java.io.IOException; import java.io.Un ...

  7. jquery插件Loadmask

    Loadmask是一个jquery plugin,使用此插件可以在DOM元素加载或更改内容时为此DOM元素添加一个屏蔽层,以防止用户互动,同时起到提醒用户后台任务正在运行的作用. 它可实现的效果:

  8. 配置postgres9.3间的fdw——实现不同postgres数据库间的互访问

    下面是安装.配置.使用fdw实现postgres数据库间互访问的方法,转载注明出处: 1.源码安装fdw支持(要求数据库源码安装) cd /usr/local/postgresql-9.3.2/con ...

  9. js实现欧几里得算法

    概念 在数学中,辗转相除法,又称欧几里得算法(英语:Euclidean algorithm),是求最大公约数的算法. 证明 首先假设有两个数a和b,其中a是不小于b的数,记a被b除的余数为r,那么a可 ...

  10. Netty高性能编程备忘录(上)

    http://calvin1978.blogcn.com/articles/netty-performance.html 网上赞扬Netty高性能的文章不要太多,但如何利用Netty写出高性能网络应用 ...