立方数(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. Leetcode 153.寻找旋转数组中的最小值

    寻找旋转数组中的最小值 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. ...

  2. String replaceAll-正则匹配-截取以指定字符开头,以指定字符结尾的字符串

    scala代码块 截取以某个字符开头,以某个字符结尾的字符串 def main(args: Array[String]): Unit = { val s = "{{a61,a2,a3},{b ...

  3. Python模块:Re模块、附软件开发目录规范

    Re模块:(正则表达式) 正则表达式就是字符串的匹配规则 正则表达式在多数编程语言里都有相应的支持,Python里面对应的模块时re 常用的表达式规则:(都需要记住) “ . ”   #  默认匹配除 ...

  4. Network(poj 3694)

    题意:一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(注意是要考虑之前连了的边,每次回答是在上一次的基础之上) /* tarjan+LCA 先用ta ...

  5. 51 nod 1007 正整数分组 (简单01背包) && csu 1547: Rectangle

    http://www.51nod.com/onlineJudge/questionCode.html#problemId=1007&noticeId=15020 求出n个数的和sum,然后用s ...

  6. Balanced Binary Tree (二叉树DFS)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  7. Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!

    Spring Boot 官网在 2019/03/15 这天发布了 Spring Boot 2.1.5 正式版,栈长表示真跟不上了.. 官宣如下 : https://spring.io/blog/201 ...

  8. 通过ICursor对Table进行操作(添加、修改、删除)

    通过ICursor对Table进行操作(添加.修改.删除) 2010-03-16 16:07:37|  分类: 工作|举报|字号 订阅 来自:http://blog.163.com/liuyang12 ...

  9. android Qemu GPS 模块简明分析

    Android 的 gps module 是  gps.default.so 在system/lib/hw/ 文件夹上, 一般提供gps功能的手机应该实现这个module和真实gps硬件交互 Qemu ...

  10. nodejs连接sqlserver

    nodejs连接sqlserver http://blog.csdn.net/kkkkkxiaofei/article/details/31353091