题意:

其实就是问一个数字能不能表示成5个正平方数的和.

题目:

链接:https://ac.nowcoder.com/acm/problem/220347
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

母牛哥有一桶油漆,把它用完可以给n平方米的墙涂上颜色.

母牛哥想要在墙上涂5个正方形(这些正方形的边长都是整数,单位是米),并且刚好把油漆用完.

母牛哥能做到吗?

输入描述:

第一行一个数字t(<=1000),表示测试样例数量

接下来t行,每行一个数字n(0<=n<=1000000),表示母牛哥的油漆可以涂多少平方米.

输出描述:

输出t行,对于每个输入.

如果母牛哥能够做到,就输出YES.

否则输出NO.

示例1

输入

2
4
55

输出

NO
YES

说明

4显然不能分解成5个正平方数,所以这桶油漆不能涂5个正方形.

55可以涂5个正方形,他们面积分别是1 4 9 16 25.

分析:

首先要知道拉格朗日四平方数和定理:
任意一个非负整数可以表示为四个平方数(0也是平方数)的和.
比如这样:
1=12+02+02+021^{2}+0^{2}+0^{2}+0^{2}12+02+02+02
2=12+12+02+021^{2}+1^{2}+0^{2}+0^{2}12+12+02+02
5=22+12+02+022^{2}+1^{2}+0^{2}+0^{2}22+12+02+02
任意一个非负整数拆出来的平方数里面,可能有任意一个非负整数拆出来的平方数里面,可能有[0,4]个0.
有一个特殊的数字169,他分别可以表示成1,2,3,4个正平方数的和.
169=132169=13^{2}169=132
169=122+52169=12^{2}+5^{2}169=122+52
169=122+42+32169=12^{2}+4^{2}+3^{2}169=122+42+32
169=102+82+22+12169=10^{2}+8^{2}+2^{2}+1^{2}169=102+82+22+12
169=122+42+22+22+12169=12^{2}+4^{2}+2^{2}+2^{2}+1^{2}169=122+42+22+22+12
那么对于任意一个不小于169的整数的整数n,设m=n-169
这个m不小于0,分解成四个平方数,可能会含有0,1,2,3,4个0.
• 如果m分解出来的四个平方数中有四个正数,那么n=m+132n=m+13^{2}n=m+132
• 如果m分解出来的四个平方数中有三个正数,那么n=m+122+52n=m+12^{2}+5^{2}n=m+122+52
• 如果m分解出来的四个平方数中有两个正数,那么n=m+122+42+32n=m+12^{2}+4^{2}+3^{2}n=m+122+42+32
• 如果mm分解出来的四个平方数中有一个正数,那么n=m+102+82+22+12n=m+10^{2}+8^{2}+2^{2}+1^{2}n=m+102+82+22+12
• 如果m分解出来的四个平方数中有没有正数,那么n=m+122+42+22+22+12n=m+12^{2}+4^{2}+2^{2}+2^{2}+1^{2}n=m+122+42+22+22+12
所以任何不小于169的整数,都符合条件.

解法一:

对于小于169的整数,暴力打表发现以下几个数字不符合
0,1,2,3,4,6,7,9,10,12,15,18,33
所以如果输入是以上数字,直接NO
否则YES.

解法二:

对于小于200的数,递归判断查找这个数是否能表示成5个正平方数的和,
若能标记,输出YES,否则NO.
若大于200的数,直接YES.

AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,dp[100],flag;
void dfs(int a,int b){if(flag) return ;if(a==0&&b==0){flag=1;return ;}if(a==0||b<0)return ;for(int i=1;i<100;i++){dfs(a-1,b-dp[i]);}
}
int main(){int t;for(int i=1;i<100;i++)dp[i]=i*i;cin>>t;while(t--){cin>>n;flag=0;if(n>=200)cout<<"YES"<<endl;else{dfs(5,n);flag==1?cout<<"YES"<<endl:cout<<"NO"<<endl;}}return 0;
}

2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)C题 图墙+拉格朗日四平方数和定理相关推荐

  1. E-捡贝壳 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)

    E-捡贝壳 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛) 小明来到一片海滩上,他很喜欢捡贝壳,但他只喜欢质量为x的倍数的贝壳. 贝壳被排列成一条直线,下标从1到n编号,小明打算从编号 ...

  2. G-分割 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)

    G-分割 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛) 在一个二维平面, 有n条平行于y轴的直线, 他们的x坐标是x[i], m条平行于x轴的直线y[i],他们的y坐标是y[i]. ...

  3. 2021年广东工业大学第十五届文远知行杯程序设计竞赛(E-捡贝壳)

    题目链接:https://ac.nowcoder.com/acm/contest/13504/E 题目的意思是在给定区间寻找为X倍数的数字,首先暴力肯定会超时的,那么就利用之前讲过的利用二维下标去一存 ...

  4. 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)

    A题M型字符串 链接:https://ac.nowcoder.com/acm/contest/13504/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...

  5. 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)详解

    传送门 A M形字符 题意: M形字符串指的是由两个相同的回文串拼接而成 给你一个串S,问有多少个前缀是M形字符串 思路: M形是有两个相同的回文串构成的,所以这个M形串本身就是回文串,我们只需要判断 ...

  6. 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛) H.有多短 思维

    传送门 文章目录 题意: 思路: 题意: 思路: 可以发现树的直径起点和终点一定是两个度数为111的点,所以我们可以把kkk平均的分给所有度数为111的点,这样答案就为2∗kcnt\frac{2*k} ...

  7. 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)部分题解

    A.A M形字符串 简要题解 题解代码 #include <iostream> #include <string> using namespace std; typedef u ...

  8. 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)E.捡贝壳

    题目链接 题目描述 小明来到一片海滩上,他很喜欢捡贝壳,但他只喜欢质量为x的倍数的贝壳. 贝壳被排列成一条直线,下标从 111 到 nnn 编号,小明打算从编号为区间 [l,r]\left [l,r ...

  9. 2021年广东工业大学第十五届文远知行杯程序设计竞赛 E.捡贝壳(离线做法)

    题意: 解法: 每组询问是查询[l,r]中x的倍数, 显然可以拆分为:[1,r]中x的倍数-[1,l-1]中x的倍数.令d[i][x]表示前i个数中有多少个数是x的倍数, O(n*(n+sq))预处理 ...

最新文章

  1. 魔术索引(返回索引值最小的一个)
  2. [20170420]关于延迟块清除3.txt
  3. Java 学习总结(一)
  4. jquery 源码分析初步
  5. 怎么寻找科研论文?(二)
  6. 眼花缭乱的数据库,怎样选择?给你这个书单,想学哪个学哪个
  7. struct device结构体(2.6.23)
  8. linux工具-journalctl查询日志
  9. DBA+北京社群第三次线下沙龙归来
  10. java的运行原理_Java的运行原理(转载)
  11. 自制操作系统-使用汇编显示 hello world
  12. 电源 PFC(功率因数校正)电路拓扑,共计100多份,内含A PFC,连续断续,交错,维也纳,各功率段的PFC电路
  13. 分子运动android,分子热运动
  14. spring_boot 发布成war包 ,部署到外部的tomcat
  15. python灰色波浪线_去除pycharm的波浪线
  16. 华为鸿蒙os多少钱一部手机,华为的鸿蒙OS,你了解多少?
  17. 电销人员如何应对工作中的挫败感
  18. Ajax-应用:实现分页
  19. 初试 RabbitMQ采坑记录:org.springframework.amqp.AmqpIOException: java.io.IOException
  20. (附源码)计算机毕业设计SSM健身俱乐部管理系统

热门文章

  1. C语言试题四十五之把第1到第p个字符,平移到字符串的最后,把第p+1到最后的字符移到字符串的前部。
  2. Android之Activity **** has leaked window android.widget.PopupWindow$PopupDecorView that was originall
  3. IOS之学习笔记四(类的实现和对象和id)
  4. linux网络编程之用多线程实现客户端到服务端的通信(基于udp)
  5. linux之ip route命令
  6. 字符串之替换字符串中连续出现的指定字符串
  7. 资料分享 | 教程与开发手册资料分享来袭
  8. oracle账号区分大小写吗,实战Oracle 11g用户密码不区分大小写
  9. 语言怎么得到直流电压并采样_交流电AC如何转换成直流电DC?
  10. icd11中文版精神障碍pdf_精神与行为障碍类别目录(ICD-11)