立方数(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。

#include<iostream>
#include<cstdio>
#include<cstring> #define ll long long
#define K 1000001 using namespace std;
ll T,n,x,ans,cnt; inline ll read()
{
ll x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
// freopen("cubic.in","r",stdin);
// freopen("cubic.out","w",stdout);
T=read();
while(T--)
{
x=read();bool flag=;
for(ll i=;i<=K;i++)
{
if(x==i*i*i)
{
printf("YES\n");
flag=;break;
}
}
if(!flag){printf("NO\n");}
}
return ;
}

立方数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。

/*X^3-Y^3=(x-y)(x^2+xy+y^2)
p是素数 ->(x-y)=1; y=x-1
x^2+x(x-1)+(x-1)^2=p 若p不是素数可以枚举p的因数d,就是枚举(x-y)。把(x-1)改为x-d。
*/
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<set>
#include<string>
using namespace std;
int main()
{
freopen("cubicp.in","r",stdin);
freopen("cubicp.out","w",stdout);
int t,flag;
scanf("%d",&t);
long long p;
while(t--)
{
flag=;
scanf("%I64d",&p);
for(int i=;i<=1e6+;i++)
{
if(3ll*i*i+*i+==p)
{
flag=;
break;
}
if (3ll*i*i+*i+>p) break;
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return ;
}

猜数字(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;

}

/*
二分答案 出现矛盾的时间
判定性
按xi从大到小排序后,在[l,r]内,若之前以被覆盖过,则矛盾。
要求互不相同,若[1,10]->7 [5,19]->7 则说明[5,10]->7,[1,4]和[11,19]最小值大于7;
所以可以合并xi相同的区间,区间交。
从大到小枚举xi判断是否有大于xi的区间并覆盖了这个区间。 可用线段树
查询:区间最小值是否为0
修改:区间改为1,不是修改区间的交,而是最小值为xi的区间并。
O(nlgn^2n); 正解并查集
f[i]表示以i开始最近的没被覆盖过的位置是哪个。
若[1,6]->7 则f[1]...f[6]=7 for(int i=f[1];i<=r;i=f[i+1]) f[l]是否>r */
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define N 1000007 using namespace std;
int n,q,ans;
int f[N];//f[i]表示以i开始最近的没被覆盖过的位置是哪个。
struct node{
int x,y,z;
}p[N],t[N]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} bool cmp(node x,node y){return x.z>y.z;}
inline int find(int x){return x==f[x]?x:f[x]=find(f[x]);} inline bool check(int k)
{
int x,y,lmin,lmax,rmin,rmax;
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<=k;i++)t[i]=p[i];
sort(t+,t+k+,cmp);
lmin=lmax=t[].x;rmin=rmax=t[].y;
for(int i=;i<=k;i++)
{
if(t[i].z<t[i-].z)
{
if(find(lmax)>rmin) return ;
for(int j=find(lmin);j<=rmax;j++)
f[find(j)]=find(rmax+);
lmin=lmax=t[i].x;
rmin=rmax=t[i].y;
}
else
{
lmin=min(lmin,t[i].x);
lmax=max(lmax,t[i].x);
rmin=min(rmin,t[i].y);
rmax=max(rmax,t[i].y);
if(lmax>rmin) return ;
}
}
if(find(lmax)>rmin) return ;
return ;
} int main()
{
int x,y,mid;
n=read();q=read();
for(int i=;i<=q;i++)
p[i].x=read(),p[i].y=read(),p[i].z=read();
x=,y=q;ans=q+;
while(x<=y)
{
mid=x+y>>;
if(check(mid)) ans=mid,y=mid-;
else x=mid+;
}
printf("%d\n",ans);
return ;
}

清北考前刷题day1早安的更多相关文章

  1. 清北考前刷题day4早安

      LI /* 没有考虑次大值有大于一个的情况 */ #include<iostream> #include<cstdio> #include<cstring> # ...

  2. 清北考前刷题day1下午好

    水题(water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽 ...

  3. 清北考前刷题day7早安

  4. 清北考前刷题day6早安

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...

  5. 清北考前刷题day5早安

    /* C(n,k) */ #include<iostream> #include<cstdio> #include<cstring> #define ll long ...

  6. 清北考前刷题day2早安

    /* 做法一:按h sort一遍,对于一段区间[i,j],高度花费就是h[j]-h[i] 然后枚举区间,把区间内C排序,一个一个尽量选即可. n^3logn 标算:n^3 dp 高度排序,保证从前往后 ...

  7. 清北考前刷题da7下午好

    三向城 /* 原图一定是一棵完全二叉树. 根节点是x,左节点是x*2,右节点是x*2+1 转化为二进制往左右走就很明显了. */ #include<iostream> #include&l ...

  8. 清北考前刷题day6下午好

    /* 贪心 负数一定不取 枚举最高位是1 且答案取为0的 位置, 更新答案. */ #include<iostream> #include<cstdio> #include&l ...

  9. 清北考前刷题da5下午好

    /* (4,1)*(3,1)*(2,1)的话1变成2然后一直是2 2变成1然后变成3 3变成1然后变成4 4变成1 */ #include<iostream> #include<cs ...

随机推荐

  1. Oracle on Azure

    价格列表 https://azure.microsoft.com/en-us/marketplace/partners/msopentech/oracle-db-12c/ Oracle-Base 安装 ...

  2. 华中农业大学第四届程序设计大赛网络同步赛-1020: Arithmetic Sequence,题挺好的,考思路;

    1020: Arithmetic Sequence Time Limit: 1 Sec  Memory Limit: 128 MB Submit:  ->打开链接<- Descriptio ...

  3. hihoCoder#1077 RMQ问题再临-线段树

    原题地址 终于做到线段树的题了,因为建树.更新.查询都是递归操作,所以其实挺好写的. 用数组存的树,记得MAX_NODE开成两倍叶节点数大小,否则RE啊..不要问我是怎么知道的. 代码: #inclu ...

  4. NOIP2013提高组D2T3 华容道

    n<=30 * m<=30 的地图上,0表示墙壁,1表示可以放箱子的空地.q<=500次询问,每次问:当空地上唯一没有放箱子的空格子在(ex,ey)时,把位于(sx,sy)的箱子移动 ...

  5. Google Protocol Buffer 的使用(二)

    一.protobuf应用场景 protobuf 在Java中的应用场景可以是序列化和反序列化,流可以通过文件或者通过网络TCP/UDP等方式传输.新建一个.proto文件 syntax = " ...

  6. Combinations(带for循环的DFS)

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  7. JS中 为什么很多要用两个!! 来判断

    比如 if(!!last) 这个就表示 if(last || false).将判断的类型,强转成boolean类型.如果last是null(或者undefine)的话,!last,返回的就是true ...

  8. JSP的客户端请求

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/client-request.html: 当浏览器请求一个网页时,它向Web服务器发送大量的信息,信息不能 ...

  9. 深度学习——练习

    对于深度学习的基础,线性回归以及逻辑回归,下面针对这两个方面做一个练习. 例子主要参考http://openclassroom.stanford.edu/MainFolder/CoursePage.p ...

  10. jquery 联动 年月日

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JQuery实例 - 生成年 ...