Wannafly挑戰賽27-A/B
阿新 • • 發佈:2018-10-27
ans 每一個 tle bject country can weight while ace
給出長度為n的序列a, 求有多少對數對 (i, j) (1 <= i < j <= n) 滿足 ai + aj 為完全平方數。
給出一棵仙人掌(每條邊最多被包含於一個環,無自環,無重邊,保證連通),要求用最少的顏色對其頂點染色,滿足每條邊兩個端點的顏色不同,輸出最小顏色數即可
鏈接: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
)i
第二行 n 個整數 a
(1 <= a
i
<= 105
)
輸出描述:
輸出一個整數,表示滿足上述條件的數對個數。
示例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