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<xjfor 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 第三次积分赛:阶乘之和(水题)的更多相关文章
- HPU第三次积分赛-D:Longest Increasing Subsequence(DP)
Longest Increasing Subsequence 描述 给出一组长度为n的序列,a1,a2,a3,a4...an, 求出这个序列长度为k的严格递增子序列的个数 输入 第一行输入T ...
- CCF 201512-1 数位之和 (水题)
问题描述 给定一个十进制整数n,输出n的各位数字之和. 输入格式 输入一个整数n. 输出格式 输出一个整数,表示答案. 样例输入 20151220 样例输出 13 样例说明 20151220的各位数字 ...
- nyoj 91 阶乘之和
点击打开链接 阶乘之和 时间限制:3000 ms | 内存限制:65535 KB 难度: 描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2 ...
- nyoj 91 阶乘之和(贪心)
阶乘之和 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3! ...
- ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)
1061: 从三个数中找出最大的数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 124[Submit][Status][We ...
- ytu 1064: 输入三个字符串,按由小到大的顺序输出(水题,字符串处理)
1064: 输入三个字符串,按由小到大的顺序输出 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 471 Solved: 188[Submit][Sta ...
- ACM 阶乘之和
阶乘之和 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3! ...
- 阶乘之和--nyoj91
描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No: 输入 第一行有一个整数0<m<10 ...
- AC日记——阶乘之和 洛谷 P1009(高精度)
题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...
随机推荐
- Maven常用dependency记录
1.servlet配置 <dependency> <groupId>junit</groupId> <artifactId>junit</arti ...
- ubuntu , 笔记本合上盖子时不关机的方法。
实测ubuntu 14.04 好使 1) 编辑 /etc/systemd/logind.conf 2) 找到 HandleLidSwitch 设置,去掉行头注释#,然后改成下面这样 HandleLid ...
- 雷林鹏分享:C# 类(Class)
C# 类(Class) 当您定义一个类时,您定义了一个数据类型的蓝图.这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作.对象是类的实 ...
- [Java代码] Java是自学好还是参加培训班好?
ava 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言. Java可运行于多个平台,如Windows, Mac OS,及其他多种UNIX版本的系统. 本教程给大家简单介 ...
- windows socket网络编程资料汇集
windows socket网络基础详解(socket的流程介绍的很详细)http://blog.csdn.net/ithzhang/article/details/8448655 Windows S ...
- zzuli 1484 继续双线
1484: 探 寻 宝 藏 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 94 Solved: 52 SubmitStatusWeb Board De ...
- How do you add?(递推)
题意:求将n分为k个数相加的种数. 如:n=20,k=2,则可分为: 0+20=20 1+19=20 2+18=20 ....... 20 +0=20 共21种方案. 解析:令f(n,m)表示将n分为 ...
- 清除mac出现的.DS_Store文件
一.什么是.DS_Store文件 在 Mac OS X 系统下,大部分文件夹中都包含 .DS_Store 隐藏文件,这里保存着针对这个目录的特殊信息和设置配置,例如查看方式.图标大小以及这个目录的一些 ...
- != 比 & 的优先级高
#define ACQU_OPTION_WEIXIN 8 int options = 7; int a = options & ACQU_OPTION_WEIXIN ; 则a 的结果应该是 ...
- jsonp 跨域2
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...