2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)C题 图墙+拉格朗日四平方数和定理
题意:
其实就是问一个数字能不能表示成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题 图墙+拉格朗日四平方数和定理相关推荐
- E-捡贝壳 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)
E-捡贝壳 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛) 小明来到一片海滩上,他很喜欢捡贝壳,但他只喜欢质量为x的倍数的贝壳. 贝壳被排列成一条直线,下标从1到n编号,小明打算从编号 ...
- G-分割 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)
G-分割 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛) 在一个二维平面, 有n条平行于y轴的直线, 他们的x坐标是x[i], m条平行于x轴的直线y[i],他们的y坐标是y[i]. ...
- 2021年广东工业大学第十五届文远知行杯程序设计竞赛(E-捡贝壳)
题目链接:https://ac.nowcoder.com/acm/contest/13504/E 题目的意思是在给定区间寻找为X倍数的数字,首先暴力肯定会超时的,那么就利用之前讲过的利用二维下标去一存 ...
- 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)
A题M型字符串 链接:https://ac.nowcoder.com/acm/contest/13504/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...
- 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)详解
传送门 A M形字符 题意: M形字符串指的是由两个相同的回文串拼接而成 给你一个串S,问有多少个前缀是M形字符串 思路: M形是有两个相同的回文串构成的,所以这个M形串本身就是回文串,我们只需要判断 ...
- 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛) H.有多短 思维
传送门 文章目录 题意: 思路: 题意: 思路: 可以发现树的直径起点和终点一定是两个度数为111的点,所以我们可以把kkk平均的分给所有度数为111的点,这样答案就为2∗kcnt\frac{2*k} ...
- 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)部分题解
A.A M形字符串 简要题解 题解代码 #include <iostream> #include <string> using namespace std; typedef u ...
- 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)E.捡贝壳
题目链接 题目描述 小明来到一片海滩上,他很喜欢捡贝壳,但他只喜欢质量为x的倍数的贝壳. 贝壳被排列成一条直线,下标从 111 到 nnn 编号,小明打算从编号为区间 [l,r]\left [l,r ...
- 2021年广东工业大学第十五届文远知行杯程序设计竞赛 E.捡贝壳(离线做法)
题意: 解法: 每组询问是查询[l,r]中x的倍数, 显然可以拆分为:[1,r]中x的倍数-[1,l-1]中x的倍数.令d[i][x]表示前i个数中有多少个数是x的倍数, O(n*(n+sq))预处理 ...
最新文章
- 魔术索引(返回索引值最小的一个)
- [20170420]关于延迟块清除3.txt
- Java 学习总结(一)
- jquery 源码分析初步
- 怎么寻找科研论文?(二)
- 眼花缭乱的数据库,怎样选择?给你这个书单,想学哪个学哪个
- struct device结构体(2.6.23)
- linux工具-journalctl查询日志
- DBA+北京社群第三次线下沙龙归来
- java的运行原理_Java的运行原理(转载)
- 自制操作系统-使用汇编显示 hello world
- 电源 PFC(功率因数校正)电路拓扑,共计100多份,内含A PFC,连续断续,交错,维也纳,各功率段的PFC电路
- 分子运动android,分子热运动
- spring_boot 发布成war包 ,部署到外部的tomcat
- python灰色波浪线_去除pycharm的波浪线
- 华为鸿蒙os多少钱一部手机,华为的鸿蒙OS,你了解多少?
- 电销人员如何应对工作中的挫败感
- Ajax-应用:实现分页
- 初试 RabbitMQ采坑记录:org.springframework.amqp.AmqpIOException: java.io.IOException
- (附源码)计算机毕业设计SSM健身俱乐部管理系统
热门文章
- C语言试题四十五之把第1到第p个字符,平移到字符串的最后,把第p+1到最后的字符移到字符串的前部。
- Android之Activity **** has leaked window android.widget.PopupWindow$PopupDecorView that was originall
- IOS之学习笔记四(类的实现和对象和id)
- linux网络编程之用多线程实现客户端到服务端的通信(基于udp)
- linux之ip route命令
- 字符串之替换字符串中连续出现的指定字符串
- 资料分享 | 教程与开发手册资料分享来袭
- oracle账号区分大小写吗,实战Oracle 11g用户密码不区分大小写
- 语言怎么得到直流电压并采样_交流电AC如何转换成直流电DC?
- icd11中文版精神障碍pdf_精神与行为障碍类别目录(ICD-11)