第二屆太原理工大學程序設計新生賽決賽 J Fuse the Cube Fragment

題目傳送門

在解密完那條古怪的序列後的不久,Vanis收到了一個奇怪的包裹,寄件人地址竟然寫着火星 ()。包裹裏有一堆蘊含着能量的小晶塊 (Cube Fragment),經過一些實驗,Vanis發現這些小晶塊具有如下性質:

  1. 有n種不同的小晶塊,編號1至n,每種晶塊都蘊含1個單位的能量。
  2. 兩種晶塊(第i種和第j種)能夠穩定融合,當且僅當i \nmid ji∤j且j \nmid ij∤i,其中\nmid∤表示不能整除。

Vanis想知道如果每種小晶塊只使用一個,能夠融合成的穩定的大晶體最大能蘊含多少個單位的能量,他想請你給出兩種不同的融合方案。

兩種融合方案是不同的,當且僅當至少存在一種晶塊出現在一種方案中而不出現在另一種方案中。

輸入描述:
輸入一行一個整數n,表示小晶塊的種類數。

數據規範:
5≤n≤3×10^4
.
輸出描述:
輸出兩行,表示兩種不同的融合方案,每行輸出一種,使用編號表示使用哪種小晶塊,每行輸出內的編號之間使用一個空格符分隔。

注意:

  1. 融合順序無關,即"3 2 5"與"3 5 2"被認爲是同一種融合方案。
  2. 滿足條件的融合方案可能不止有兩種,任意合理的兩種融合方案都會被認爲是正確的。
    示例1
    輸入

5

輸出

3 2 5
3 4 5

示例2
輸入

7

輸出

2 3 5 7
4 6 5 7

思路:開始還以爲是2-n之間的所有素數,後來多推幾個數據發現了是後一半的數這個結論。
代碼比較簡單。

#include<bits/stdc++.h>
#include<unordered_map>
#include<unordered_set>
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
int sum,n;
bool isPrime( ll num )
{
    
    if(num ==2|| num==3 )   
        return 1 ;
    if(num %6!= 1&&num %6!= 5)  
        return 0 ;
    int tmp =sqrt(num);
    for(int i= 5; i <=tmp; i+=6 )   
        if(num %i== 0||num %(i+ 2)==0) 
            return 0 ;
    return 1 ;
}
int main()
{
    int n;
    cin>>n;
    if(n==5)
    {
        cout<<2<<" "<<3<<" "<<5<<endl;
        cout<<3<<" "<<4<<" "<<5<<endl;
        return 0;
    }
    for(int i=n/2+1;i<=n;i++)
        cout<<i<<" ";
    cout<<endl;
    int tem=n/2;
    for(int i=n/2;i<=n;i++)
    {
        if(i%tem==0&&i!=n/2)continue;
        cout<<i<<" ";
    }
    cout<<endl;
    system("pause");
    return 0;


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