【隊內胡策】2017.11.2

T1

立方數(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,p的立方根到10^6,枚舉就能過。當時好像是開了個數組,卡着3200w。實際上不用……對於每個數都枚舉一下也不會超時233.
注意i要開成longlong

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=31000000+6;
unsigned long long s;
bool a[maxn];
int t;
bool pd(unsigned long long s)
{
    for(long long i=1;i<=1000010;i++)
    if(s==i*i*i) return 1;
    return 0;
}
int main()
{
    //freopen("cubic.in","r",stdin);
    //freopen("cubic.out","w",stdout);
    scanf("%d",&t);
    while(t--)
    {
        cin>>s;
        if(pd(s)) puts("YES");
        else puts("NO");

    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}

puts完答案之後不用加回車……

T2

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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
unsigned long long s;
const int maxn=500000; 
unsigned long long a[maxn];
int t;
bool pd(unsigned long long s)
{
    for(long long i=1;i<=1000010;i++)
    {
        long long j=i-1;
        if(i*i*i-j*j*j==s) return 1;
    }
    return 0;
}
int main()
{
    freopen("cubicp.in","r",stdin);
    freopen("cubicp.out","w",stdout);
    scanf("%d",&t);
    while(t--)
    {
        cin>>s;
        if(pd(s)) puts("YES");
        else puts("NO");
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}

只需要考慮j=i-1
由於p是質數,根據立方差公式:
a^3-b^3=(a-b)(a^2+a*b+b^2)
p的因子只有1和它本身,所以要麼a-b=1,要麼a^2+a*b+b^2=1.
因爲a^2+a*b+b^2>a-b 所以只能是a-b=1。

T3

洛谷 2898[USACO08JAN]haybale猜測Haybale Guessing

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章