1. 程式人生 > >Wannafly挑戰賽27-A/B

Wannafly挑戰賽27-A/B

ans 每一個 tle bject country can weight while ace

鏈接:https://www.nowcoder.com/acm/contest/215/A
來源:牛客網

題目描述

“White shores, and beyond. A far green country under a swift sunrise.”--灰魔法師

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

輸入描述:

第一行一個整數 n (1 <= n <= 10
5
)
第二行 n 個整數 a
i
 (1 <= a
i
 <= 10
5
)

輸出描述:

輸出一個整數,表示滿足上述條件的數對個數。
示例1

輸入

復制
3
1 3 6

輸出

復制
2

說明

滿足條件的有 (1, 2), (2, 3) 兩對。

  預處理出來 2e5以內的完全平方數(<500個),然後遍歷每一個a[i],嘗試枚舉所有的完全平方數看是否可行即可,註意最後除二,因為
每一對都算了兩次。
  
 1 #include<bits/stdc++.h>
 2 using namespace std;
3 #define LL long long 4 #define pb push_back 5 #define mp make_pair 6 #define pii pair<int,int> 7 LL a[100010]; 8 int vis[200110]; 9 vector<LL>S; 10 int main(){ 11 memset(vis,0,sizeof(vis)); 12 for(LL i=1;i*i<=200000;++i)S.pb(i*i); 13 int n; 14 scanf("%d",&n);
15 for(int i=1;i<=n;++i){ 16 scanf("%lld",a+i); 17 vis[a[i]]++; 18 } 19 LL ans=0; 20 for(int i=1;i<=n;++i){ 21 vis[a[i]]--; 22 for(auto x:S){ 23 //cout<<x<<endl; 24 if(x-a[i]>0 && vis[x-a[i]]!=0) ans+=vis[x-a[i]]; 25 } 26 vis[a[i]]++; 27 } 28 cout<<ans/2<<endl; 29 return 0; 30 }

 鏈接:https://www.nowcoder.com/acm/contest/215/B
來源:牛客網

題目描述

“サーヴァント、キャスター、Medea。”--紫魔法師
給出一棵仙人掌(每條邊最多被包含於一個環,無自環,無重邊,保證連通),要求用最少的顏色對其頂點染色,滿足每條邊兩個端點的顏色不同,輸出最小顏色數即可

輸入描述:

第一行包括兩個整數n,m,表示頂點數和邊數
n <= 100000, m <= 200000
接下來m行每行兩個整數u,v,表示u,v之間有一條無向邊,保證數據合法

輸出描述:

一行一個整數表示最小顏色數
示例1

輸入

復制
3 4
1 2
2 3
3 4
1 4

輸出

復制
2
觀察發現,只要出現奇環,那麽答案就是3,否則答案就是2.沒有特判一個點的情況也AC了= =
找環的長度只需要dfs一下,d[i]記錄根到此點的距離,u->x訪問第二次的時候,環長度就是d[u]+1-d[x]。
  
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=100010;
 4 std::vector<int> g[maxn];
 5 int d[maxn]={-1};
 6 bool vis[maxn];
 7 void dfs(int u,int fa){
 8     vis[u]=1;
 9     d[u]=d[fa]+1; 
10     for(auto x:g[u]){
11         if(x==fa) continue;
12         if(vis[x]){
13             if((d[u]+1-d[x])%2==1){
14                 cout<<3<<endl;
15                 exit(0);
16             }
17         }
18         else{
19             dfs(x,u);
20         }
21     }
22 }
23 int main(){
24     int n,m,u,v;
25     cin>>n>>m;
26     while(m--){
27         scanf("%d%d",&u,&v);
28         g[u].push_back(v);
29         g[v].push_back(u);
30     }
31     dfs(1,0);
32     cout<<2<<endl;
33     return 0;
34 }

 

Wannafly挑戰賽27-A/B