Codeforces Beta Round #27 ABC題

來源:互聯網
上載者:User

因為今天要打地區賽的緣故,昨晚CF沒有做,現在放出ABC的思路,後兩題表示不怎麼會,一題圖論,一題數論,平時都是隊友搞定的。。。

 

A Next Test

這題很簡單,寫的暴力點也無妨,n<=50的,開個3200大小的數組,然後記錄use[i]表示i這個序號是否被用過,然後從頭到尾迴圈一遍即可,時間複雜度是O(n)的。

 

My Code:

#include <iostream><br />#include <cstdio><br />#include <cstring><br />#include <cstdlib></p><p>using namespace std;</p><p>bool use[3200]={0};</p><p>int main()<br />{<br />int n,id;</p><p>scanf("%d",&n);<br />for(int i=0;i<n;i++)<br />{<br />scanf("%d",&id);<br />use[id]=true;<br />}<br />for(int i=1;i<3200;i++)<br />if(!use[i])<br />{<br />printf("%d/n",i);<br />break;<br />}</p><p>return 0;<br />}<br />

 

B Tournament

這題要求找到剩下的那場比賽的結果,這題可以轉化一下模型,告訴你一個有向非循環圖,缺了一條邊,並且要保證全部點連通(弱連通),可以先用一個數組標記有向邊,n很小,直接建個鄰接矩陣,然後剩下兩個沒有連邊的隨便加一條,跑bfs看是否有迴路,如果沒有,那麼說明這條邊是正確的,否則就將這條邊反向一下。最後輸出這條邊的兩個端點就可以了。

 

My Code:

#include <iostream><br />#include <cstdio><br />#include <cstring><br />#include <cstdlib><br />#include <queue></p><p>using namespace std;</p><p>bool mp[100][100]={0};<br />int n;</p><p>bool bfs(int st)<br />{<br />bool vis[100]={0};<br />queue<int> q;<br />int now;</p><p>q.push(st);<br />while(!q.empty())<br />{<br />now=q.front();<br />q.pop();<br />for(int i=1;i<=n;i++)<br />{<br />if(mp[now][i]&&!vis[i])<br />{<br />if(i==st)<br />return false;<br />vis[i]=true;<br />q.push(i);<br />}<br />}<br />}</p><p>return true;<br />}</p><p>int main()<br />{<br />int t;<br />int x,y;</p><p>scanf("%d",&n);<br />t=n*(n-1)/2-1;<br />for(int i=0;i<t;i++)<br />{<br />scanf("%d%d",&x,&y);<br />mp[x][y]=true;<br />}</p><p>for(int i=1;i<=n;i++)<br />{<br />for(int j=i+1;j<=n;j++)<br />{<br />if(mp[i][j]==false&&mp[j][i]==false)<br />{<br />mp[i][j]=true;<br />if(!bfs(i))<br />{<br />printf("%d %d/n",j,i);<br />}<br />else<br />{<br />printf("%d %d/n",i,j);<br />}<br />return 0;<br />}<br />}<br />}</p><p>return 0;<br />}<br />

 

C Unordered Subsequence

 

這題直接類比,如果原來的序列是有序的,那麼就輸出0,否則答案一定是3,剩下的三個數。可以取第一個,轉折點,還有就是轉折點之後的第一個點。

之前要先把相等的數字去掉,然後找到第一個不同的數字當做第一個和第二個答案。

時間複雜度是O(n)的。

 

My Code:

 #include <cstdio><br />#include <cstring><br />#include <cstdlib></p><p>using namespace std;</p><p>const int MAX=100010;</p><p>int main()<br />{<br />bool up;<br />int n,st;<br />int a[MAX];</p><p>scanf("%d",&n);<br />for(int i=0;i<n;i++)<br />{<br />scanf("%d",&a[i]);<br />}</p><p>st=0;<br />while(st<n-1&&a[st]==a[st+1]) st++;<br />if(n-st<=2)<br />{<br />puts("0");<br />return 0;<br />}<br />if(a[st+1]>a[st])<br />up=true;<br />else<br />up=false;</p><p>if(up)<br />{<br />for(int i=st+2;i<n;i++)<br />{<br />if(a[i]<a[i-1])<br />{<br />puts("3");<br />printf("%d %d %d/n",st+1,i,i+1);<br />return 0;<br />}<br />}<br />puts("0");<br />}<br />else<br />{<br />for(int i=2;i<n;i++)<br />{<br />if(a[i]>a[i-1])<br />{<br />puts("3");<br />printf("%d %d %d/n",st+1,i,i+1);<br />return 0;<br />}<br />}<br />puts("0");<br />}</p><p>return 0;<br />}<br />

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.