清北·NOIP2017济南考前冲刺班 DAY1 morning

立方数(cubic)

Time Limit:1000ms   Memory Limit:128MB

 

题目描述

LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数。

现在给定一个数P,LYK想要知道这个数是不是立方数。

当然你有可能随机输出一些莫名其妙的东西来骗分,因此LYK有T次询问~

 

输入格式(cubic.in)

    第一行一个数T,表示有T组数据。

    接下来T行,每行一个数P。

 

输出格式(cubic.out)

输出T行,对于每个数如果是立方数,输出“YES”,否则输出“NO”。

 

输入样例

3

8

27

28

 

输出样例

YES

YES

NO

 

数据范围

对于30%的数据p<=100。

对于60%的数据p<=10^6。

对于100%的数据p<=10^18,T<=100。

 

 

 这个题应该是个送分题

我们看这个题的数据范围p是<=10^18的,因为这个题要求是x*x*x==n,所以我们·如果枚举x,时间复杂度是10^6的,再加上T<=100,那么我们的总时间复杂度是10^6*100也就是10^8,因此不会爆

O(≧口≦)O   zz啊、、忘了初始化了

当使用多个while的时候,一定不要忘了初始化!!!!!!!!!

 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
inline long long read()
{long long x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;
}
int main()
{freopen("cubic.in","r",stdin);freopen("cubic.out","w",stdout);int T;bool flag;long long n,i=1;scanf("%d",&T);while(T--){n=read();flag=false,i=1;while(1){if(i*i*i==n) {flag=true;break;}else {if(i*i*i<n) i++;else break;}}if(flag) printf("YES\n");else printf("NO\n");}return 0;
}
AC代码

 

#include <bits/stdc++.h>
using namespace std;
long long A;
int T;
bool work(long long x)
{for (int i=1; ; i++){if (1ll*i*i*i==x) return true;if (1ll*i*i*i>x) return false;}
}
int main()
{freopen("cubic.in","r",stdin);freopen("cubic.out","w",stdout);scanf("%d",&T);while (T--){scanf("%I64d",&A);if (work(A)) puts("YES"); else puts("NO");}return 0;
}
std

 

 

 

 

立方数2(cubicp)

Time Limit:1000ms   Memory Limit:128MB

 

题目描述

LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数。

LYK还定义了一个数叫“立方差数”,若一个数可以被写作是两个立方数的差,则这个数就是“立方差数”,例如7(8-1),26(27-1),19(27-8)都是立方差数。

现在给定一个数P,LYK想要知道这个数是不是立方差数。

当然你有可能随机输出一些莫名其妙的东西,因此LYK有T次询问~

这个问题可能太难了…… 因此LYK规定P是个质数!

 

输入格式(cubicp.in)

    第一行一个数T,表示有T组数据。

    接下来T行,每行一个数P。

 

输出格式(cubicp.out)

输出T行,对于每个数如果是立方差数,输出“YES”,否则输出“NO”。

 

输入样例

5

2

3

5

7

11

 

输出样例

NO

NO

NO

YES

NO

 

 

数据范围

对于30%的数据p<=100。

对于60%的数据p<=10^6。

对于100%的数据p<=10^12,T<=100。

 

 呜呜~~~~(>_<)~~~~

打了个暴力,应该全T了吧、、

 我们要求的是x^3-y^3==p,看到这个式子,我们肯定能立即想到我们的立方差公式吧,据说在初中就学过的(呜呜,捂脸,我是一个小学生) 

公式:

(a+b)(a²-ab+b²)=a³+b³
(a-b)(a²+ab+b²)=a³-b³
(a-b)^3=(a-b)(a-b)(a-b)=(a^2-2ab+b^2)(a-b)=a^3-3a^2b+3ab^2-b^3
(a+b)^3=a^3+3a^2b-3ab^2+b^3

 我们可以看到我们上面的式子可以化为x^3-y^3=(x-y)*(a^2+a*b+b^2)=p,我们知道p是素数,那么p的因子便只有1和它本身,我们看式子,只能是x-y=1了,即y=x-1,所以上面的式子又可以化成(x^2+x*(x-1)+x^2)==p,这样我们又只需要10^6枚举x就好了!

 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
long long n,i,j,x,l;
inline long long read()
{long long x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;
}
int main()
{freopen("cubicp.in","r",stdin);freopen("cubicp.out","w",stdout);int T;bool flag;scanf("%d",&T);while(T--){n=read();flag=false;l=0;if(n==0) {flag=true; break;}for(i=1;i<=1000000;i++){if(!l) l=i-1;for(j=l;j>=1;j--){x=i*i*i-j*j*j;if(x==n) {flag=true;break;}else if(x>n) break;else l=j;}}  if(flag) printf("YES\n");else printf("NO\n");}return 0;
}
TLE。。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
long long n,x,y;
inline long long read()
{long long x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;
}
int main()
{freopen("cubicp.in","r",stdin);freopen("cubicp.out","w",stdout);int T;bool flag;scanf("%d",&T);while(T--){n=read();flag=false;if(n==0) {flag=true; break;}for(x=1;x<=1000000;x++){y=x*x+x*(x-1)+(x-1)*(x-1);if(y==n) {flag=true;break;}if(y>n) break;}  if(flag) printf("YES\n");else printf("NO\n");}return 0;
}
AC代码

 

 

 

猜数字(number)

Time Limit:1000ms   Memory Limit:128MB

 

题目描述

    LYK在玩猜数字游戏。

    总共有n个互不相同的正整数,LYK每次猜一段区间的最小值。形如[li,ri]这段区间的数字的最小值一定等于xi。

    我们总能构造出一种方案使得LYK满意。直到…… LYK自己猜的就是矛盾的!

    例如LYK猜[1,3]的最小值是2,[1,4]的最小值是3,这显然就是矛盾的。

    你需要告诉LYK,它第几次猜数字开始就已经矛盾了。

 

输入格式(number.in)

    第一行两个数n和T,表示有n个数字,LYK猜了T次。
    接下来T行,每行三个数分别表示li,ri和xi。

 

输出格式(number.out)

输出一个数表示第几次开始出现矛盾,如果一直没出现矛盾输出T+1。

 

输入样例

20 4

1 10 7

5 19 7

3 12 8

1 20 1

 

输出样例

3

 

数据范围

对于50%的数据n<=8,T<=10。

对于80%的数据n<=1000,T<=1000。

对于100%的数据1<=n,T<=1000000,1<=li<=ri<=n,1<=xi<=n(但并不保证一开始的所有数都是1~n的)。

 

Hint

建议使用读入优化

inline int read()

{

       int x = 0, f = 1;

       char ch = getchar();

       for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;

       for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';

       return x * f;

}

 

线段树+二分答案

 

对于这种类型的问题,我们有两种做法,一种是枚举判断没一个加入以后是否可行,第二种方法是进行二分

1~mid出现矛盾,答案在l~mid中,否则答案一定出现在mid+1~r中。

判断性问题,给定一堆猜测,判断是否产生矛盾

按xi从小到大排序

怎么判断是否矛盾?

对于[l,r]之前已经被更大的·xi覆盖了,说明出现了矛盾

将所有xi相同的进行合并(取区间交)

从大到小枚举这个xi,判断比xi大的区间的并是否完全覆盖了这个区间

 

查询:区间最小值

修改:将一段区间修改为1

 

这个操作,我们可以用并查集进行维护,判断一个区间是否已经被一个更大的xi覆盖

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1000011
using namespace std;
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return  x*f;
}
struct Node
{int x,y,z;
}node[N],b[N];
int n,t,lmin,lmax,rmin,rmax,f[N];
int cmp(Node a,Node b)
{return a.z>b.z;}
int find(int x)
{if(f[x]==x) return x;f[x]=find(f[x]);return f[x];
}
int judge(int k)
{for(int i=1;i<=n+1;i++) f[i]=i;for(int i=1;i<=k;i++) b[i]=node[i];sort(b+1,b+1+k,cmp);lmin=lmax=b[1].x;rmin=rmax=b[1].y;for(int i=2;i<=k;i++){if(b[i].z<b[i-1].z){if(find(lmax)>rmin) return 1;for(int j=find(lmin);j<=rmax;j++)f[find(j)]=find(rmax+1);lmin=lmax=b[i].x;rmin=rmax=b[i].y;}else{lmin=min(lmin,b[i].x);lmax=max(lmax,b[i].x);rmin=min(rmin,b[i].y);rmax=max(rmax,b[i].y);if(lmax>rmin) return 1;}}    if(find(lmax)>rmin) return 1;return 0;
}
int main()
{freopen("number.in","r",stdin);freopen("number.out","w",stdout);n=read(),t=read();for(int i=1;i<=t;i++)node[i].x=read(),node[i].y=read(),node[i].z=read();int l=1,r=t,mid,ans;while(l<=r){mid=(l+r)>>1;if(judge(mid)) ans=mid,r=mid-1;else l=mid+1;}printf("%d",ans);return 0;
}
AC代码

 

转载于:https://www.cnblogs.com/z360/p/7746564.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020美国纽约大学计算机科学排名,2020美国纽约大学排名第几

纽约大学在2020年《美国新闻与世界报道》美国全国性大学排名中排名第29名&#xff0c;在2020年QS世界大学排名中排名第39名。纽约大学专业排名QS世界大学生命科学与医学专业排名 2020年 第40名QS世界大学医学专业排名 2020年 第34名QS世界大学牙科专业排名 2020年 第14名QS世界…

游戏角色开始动起来了,真帅!【python 游戏实战 03】

前言 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新…

如何让 ASP.NET Core 支持绑定查询字符串中的数组

前言有网友在交流群中询问&#xff0c;如何让 ASP.NET Core 支持绑定查询字符串中的数组&#xff1a;据说&#xff0c;在 .NET 7 中已经支持了&#xff1a;但是&#xff0c;在这之前的 .NET 版本能实现相同功能吗&#xff1f;ByteArrayModelBinder这时&#xff0c;群里的网友提…

Docker Storm开发环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 1. compose文件 storm-stack.yml version: 3.1services:zookeeper:image: zookeepercontainer_name: zookeeperrestart: alwaysports:- 2181:2181nimbus:image: stormcontainer_name: nimbuscommand: storm nimbusdepend…

南方方洲号无人测量船系统简介

南方智能测量船系统由小型无人船、自动导航模块、声纳探测模块、外围传感模块、岸基操控终端、无人船专用软件等部分组成。将先进的卫星定位、声纳、传感器与智能导航控制等众多技术相结合,提出了高精度、智能化、集成化、机动化、网络化的勘测解决方案。该系统能自主航行并完…

1小时1篇文学会python再做个飞机大战游戏

注&#xff1a; 想慢慢学习的同学可以看我的 《python 入门到游戏实战专栏》&#xff08;更新中&#xff09; 想学 C 的同学可以看《大话系列之C语言》&#xff08;基本更新完&#xff09; 想学 C 的同学可以看《大话C》&#xff08;更新中&#xff09; 想做习题的可以看《大学…

如何优雅的编写git的提交信息

前言在公司的日常工作当中或者个人的开源项目&#xff0c;将代码提交到代码库时。都会遇到下面这样的对话框&#xff0c;通常都会随便写点内容在里面。当遇到问题需要回溯的时候就成了给自己造成的麻烦&#xff0c;因为无法通过commit message来非常直观的看到这一次提交了什么…

android快捷开发之Retrofit网络加载框架的简单使用

大家都知道&#xff0c;安卓最大的特点就是开源化&#xff0c;这自然会产生很多十分好用的第三方API&#xff0c;而基本每一个APP都会与网络操作和缓存处理机制打交道&#xff0c;当然&#xff0c;你可以自己通过HttpUrlConnection再通过返回数据进行解析解决&#xff0c;而我们…

打开计算机无法显示工具栏,任务栏不显示打开的窗口怎么办教程

我们在使用电脑的时候&#xff0c;打开很多程序的时候&#xff0c;会最小化某些窗口&#xff0c;只留在用的窗口&#xff0c;而最小化都是缩小为一个图标放入屏幕下方的任务栏的&#xff0c;但有时候不知道为什么任务栏不显示打开的窗口了&#xff0c;这时候也就无法直接用鼠标…

ArcGIS 10.6提取道路中心线的两种方法经典教程

我们工作中碰到的道路数据通常为面状,需要提取道路中心线,本文讲解ArcGIS10.6中从面状道路数据中提取道路中心线的两种常用经典方法。 方法一:使用ArcGIS 10.6提供的提取道路中心线工具 本实验中使用到面状数据如下所示: 首先,将面状数据转为线状数据。 转完之后,道路尽头…

衡量计算机浮点数操作性能,计算机系统基础:计算机性能评价知识笔记

1、计算机性能常用的性能评测方法1.1 时钟频率计算机的时钟频率可以反映出机器的运行速度。一般主频越高&#xff0c;速度越快。1.2 指令执行速度加法指令执行速度是衡量计算机性能指标的重要指标之一。1.3 等效指令速度法随着计算机指令系统发展&#xff0c;种类越来越多&…

python 写游戏好简单啊,我用键盘可以随意控制角色了【python 游戏实战 04】

前言 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新…

树形表的平行查询设计

本文由网友长空X投稿&#xff0c;欢迎转载、分享原文作者&#xff1a;长空X&#xff08;CSDN同名“长空X“&#xff0c;CkTools的作者&#xff0c;github: https://github.com/hjkl950217&#xff09;原文链接&#xff1a;https://www.cnblogs.com/gtxck/articles/16293295.htm…

Ubuntu 16.04安装SQLite Browser操作SQLite数据库

安装&#xff1a; sudo apt-get install sqlitebrowser 启动&#xff1a;

(13)python 字典 2 分钟速解

本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新。 若…

计算机绘画作品 星空,关于近期绘画作品《星空系列》的自述:

《星空系列》是一个很偶然的念想下产生的&#xff0c;但又绝非偶然。最开初的点是高一刚开始学画的时候&#xff0c;高中的老师给我们免费提供油画材料给我们练习&#xff0c;那时候我并没有“安分”地练习高考绘画&#xff0c;总想做一些关于自己想法的作品&#xff0c;那时候…

BootStrap导航栏的使用

默认的导航栏 创建一个默认的导航栏的步骤如下&#xff1a; 向 <nav> 标签添加 class .navbar、.navbar-default。向上面的元素添加 role"navigation"&#xff0c;有助于增加可访问性。向 <div> 元素添加一个标题 class .navbar-header&#xff0c;内部包…

安装SQL Server 2005时,出现“SQL Server 服务无法启动。……”提示的解决方法

安装SQL Server 2005时&#xff0c;出现“SQL Server 服务无法启动。……”提示的解决方法上午在自己XP SP3电脑上安装SQL Server 2005时出现如下提示&#xff1a; 根据这一情况&#xff0c;我把自己的解题步骤写下来和大家分享&#xff0c;虽然简单了些&#xff0c;可是安装的…

.NET MAUI 正式发布,再见了 Xamarin.Forms

David Ortinau 在dotnet 团队博客上发表了一篇文章《Introducing .NET MAUI – One Codebase, Many Platforms》&#xff0c;在这篇文章里宣布了MAUI的正式发布。https://github.com/dotnet/maui/releases/tag/6.0.312 https://devblogs.microsoft.com/dotnet/introducing-dotn…

利用SQL注入获取服务器最高权限

单位有台数据库服务器&#xff08;windows 2000 操作系统&#xff0c;sql server 2000&#xff09;前段时间莫名其妙的被***了跑到机房&#xff0c;通过PE进去一看&#xff0c;发现多了一个账户&#xff08;SQLDEBUG)。并且administrator账户被禁用了看看数据没少&#xff0c;也…