牛客網Wannafly挑戰賽27部分題解

2021-08-30 04:37:09 字數 3198 閱讀 1435

number1:求完全平方數的個數

「white shores, and beyond. a far green country under a swift sunrise.」--灰魔法師

給出長度為n的序列a, 求有多少對數對 (i, j) (1 <= i < j <= n) 滿足 ai + aj 為完全平方數。

這個題暴力求肯定會超時。知道數字的取值範圍就知道最大平方數是多少,然後通過平方數來求是否有兩個數相加,得到這個數;

**如下:

#include#include#include#include#include#include#include#include#include#define pi acos(-1)

#define for(i, a, b) for(int (i) = (a); (i) <= (b); (i) ++)

#define bor(i, a, b) for(int (i) = (b); (i) >= (a); (i) --)

#define max(a,b) (((a)>(b))?(a):(b))

#define min(a,b) (((a)<(b))?(a):(b))

#define lson l, mid, rt << 1

#define rson mid + 1, r, rt << 1 | 1

#define eps 1e-7

using namespace std;

typedef long long ll;

const int maxn = 3e5 + 10;

const int inf = 0x3f3f3f3f;

const double eps = 1e-10;

const ll mod = 1e9 + 7;

inline int read()

int n;

int a[100100];

int b[maxn];

int main()

ll ans = 0;

for(i, 2, 500)else

}} }

printf("%lld\n",ans/2);

return 0;

}

比賽結束後看別人的**,就發現自己的**還可以改好多。不夠好;

**:

#include#include#include#include#include#include#include#include#include#define pi acos(-1)

#define for(i, a, b) for(int (i) = (a); (i) <= (b); (i) ++)

#define bor(i, a, b) for(int (i) = (b); (i) >= (a); (i) --)

#define max(a,b) (((a)>(b))?(a):(b))

#define min(a,b) (((a)<(b))?(a):(b))

#define lson l, mid, rt << 1

#define rson mid + 1, r, rt << 1 | 1

#define eps 1e-7

using namespace std;

typedef long long ll;

const int maxn = 3e5 + 10;

const int inf = 0x3f3f3f3f;

const double eps = 1e-10;

const ll mod = 1e9 + 7;

inline int read()

int n;

int b[maxn];

int main()

ll ans = 0;

for(i, 1, 500)

printf("%lld\n",ans);

return 0;

}

number2:這道題就是由給出的邊判斷是否有奇數環。如果存在輸出3,否則輸出2,特判一下如果只有乙個點的話就輸出1;

這個判斷就是可以使用並查集來判斷

給出一棵仙人掌(每條邊最多被包含於乙個環,無自環,無重邊,保證連通),要求用最少的顏色對其頂點染色,滿足每條邊兩個端點的顏色不同,輸出最小顏色數即可

第一行包括兩個整數n,m,表示頂點數和邊數

n <= 100000, m <= 200000

接下來m行每行兩個整數u,v,表示u,v之間有一條無向邊,保證資料合法

一行乙個整數表示最小顏色數
**如下:

#include#include#include#include#include#include#include#include#include#define pi acos(-1)

#define for(i, a, b) for(int (i) = (a); (i) <= (b); (i) ++)

#define bor(i, a, b) for(int (i) = (b); (i) >= (a); (i) --)

#define max(a,b) (((a)>(b))?(a):(b))

#define min(a,b) (((a)<(b))?(a):(b))

#define lson l, mid, rt << 1

#define rson mid + 1, r, rt << 1 | 1

#define eps 1e-7

using namespace std;

typedef long long ll;

const int maxn = 2e5 + 10;

const int inf = 0x3f3f3f3f;

const double eps = 1e-10;

const ll mod = 1e9 + 7;

inline int read()

int p[maxn], s[maxn];

int ans;

void init()

int finds(int x)

void unions(int x, int y)else

}int n,m;

int main()

if(n == 1)else printf("%d\n",ans);

return 0;

}

在看其他人是還有其他方法。使用的是黑白染色判斷dfs不是太會,看懂後會補上的。

牛客網 Wannafly挑戰賽21 A 燈塔

題目鏈結 題目描述 z市是一座港口城市,來來往往的船隻依靠燈塔指引方向。在海平面上,存在n個燈塔。每個燈塔可以照亮以它的中心點為中心的90 範圍。特別地,由於特殊限制,每個燈塔照亮範圍的角的兩條邊必須要麼與座標軸平行要麼與座標軸成45 由於經費限制,z市的燈塔只能被點亮一座。你需要求出在這種情況下,...

牛客Wannafly挑戰賽12 題解

傳送門 說是比賽題解,其實我只會前三題 後面的一定補 t1題意,在乙個長度為n的時間內,問如何選擇存款期限,使得收益最大。dp include include include include using namespace std define fi first define se second d...

牛客網wannafly挑戰賽13 D 貪心

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 第一行包括兩個數t,n,表示有n個蛋糕,最小的蛋糕的質量與最大的蛋糕的質量的比值不小於t 接下來n行,每行乙個數wi,表示n個蛋糕的質量輸出包括一行,為最小切割的刀...