Codeforces Beta Round #9 (Div. 2 Only)
Codeforces Beta Round #9 (Div. 2 Only)
http://codeforces.com/contest/9
A
gcd水题
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define lson l,mid,rt<<1 4 #define rson mid+1,r,rt<<1|1 5 #define sqr(x) ((x)*(x)) 6 #define maxn 1000010 7 typedef long long ll; 8 /*#ifndef ONLINE_JUDGE 9 freopen("1.txt","r",stdin); 10 #endif */ 11 int gcd(int a,int b){ 12 if(b==0) return a; 13 return gcd(b,a%b); 14 } 15 16 int main(){ 17 #ifndef ONLINE_JUDGE 18 // freopen("1.txt","r",stdin); 19 #endif 20 int n,m; 21 cin>>n>>m; 22 n=max(n,m); 23 int fz=6-n+1; 24 int fm=6; 25 int d=gcd(fz,fm); 26 // cout<<fz<<" "<<fm<<endl; 27 cout<<fz/d<<"/"<<fm/d<<endl; 28 }
B
模拟题
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define lson l,mid,rt<<1 4 #define rson mid+1,r,rt<<1|1 5 #define sqr(x) ((x)*(x)) 6 #define maxn 1000010 7 typedef long long ll; 8 /*#ifndef ONLINE_JUDGE 9 freopen("1.txt","r",stdin); 10 #endif */ 11 struct Point{ 12 ll x,y; 13 }a[105]; 14 15 double dist[105][105]; 16 17 int main(){ 18 #ifndef ONLINE_JUDGE 19 freopen("1.txt","r",stdin); 20 #endif 21 ll n,vb,vs; 22 cin>>n>>vb>>vs; 23 for(int i=1;i<=n;i++){ 24 cin>>a[i].x; 25 a[i].y=0; 26 } 27 ll sx,sy; 28 cin>>sx>>sy; 29 for(int i=1;i<=n;i++){ 30 dist[1][i]=sqrt(sqr(a[1].x-a[i].x)+sqr(a[1].y-a[i].y)); 31 } 32 for(int i=1;i<=n;i++){ 33 dist[i][103]=sqrt(sqr(a[i].x-sx)+sqr(a[i].y-sy)); 34 } 35 double ans=1e18; 36 ll pos=0; 37 for(int i=1;i<=n;i++){ 38 if(a[i].x!=0){ 39 double t1=dist[1][i]/vb; 40 double t2=dist[i][103]/vs; 41 if(ans>=t1+t2){ 42 ans=t1+t2; 43 pos=i; 44 } 45 } 46 } 47 cout<<pos<<endl; 48 }
C
dfs
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define lson l,mid,rt<<1 4 #define rson mid+1,r,rt<<1|1 5 #define sqr(x) ((x)*(x)) 6 #define maxn 1000010 7 typedef long long ll; 8 /*#ifndef ONLINE_JUDGE 9 freopen("1.txt","r",stdin); 10 #endif */ 11 map<ll,int>mp; 12 ll n; 13 int ans; 14 15 void dfs(int pos){ 16 if(pos>n) return; 17 if(!mp[pos]){ 18 ans++; 19 mp[pos]=1; 20 } 21 else return; 22 dfs(pos*10); 23 dfs(pos*10+1); 24 } 25 26 int main(){ 27 #ifndef ONLINE_JUDGE 28 // freopen("1.txt","r",stdin); 29 #endif 30 cin>>n; 31 dfs(1); 32 cout<<ans<<endl; 33 }
D
参考博客:http://www.cnblogs.com/qscqesze/p/5414271.html
DP
dp[i][j]表示当前用了i个节点,高度小于等于j的方案数
dp[i][j] = sigma(dp[k][j-1]*dp[i-k-1][j-1])
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define lson l,mid,rt<<1 4 #define rson mid+1,r,rt<<1|1 5 #define sqr(x) ((x)*(x)) 6 #define maxn 1000010 7 typedef long long ll; 8 /*#ifndef ONLINE_JUDGE 9 freopen("1.txt","r",stdin); 10 #endif */ 11 12 long long dp[45][45]; 13 14 int main(){ 15 #ifndef ONLINE_JUDGE 16 // freopen("1.txt","r",stdin); 17 #endif 18 int n,h; 19 cin>>n>>h; 20 for(int i=1;i<=n;i++){ 21 dp[0][i-1]=1; 22 for(int j=1;j<=n;j++){ 23 for(int k=0;k<j;k++){ 24 dp[j][i]+=dp[k][i-1]*dp[j-k-1][i-1]; 25 } 26 } 27 } 28 cout<<dp[n][n]-dp[n][h-1]<<endl; 29 }
E
题意:给出n个点,m条边,问是否能通过加一些边,使得n个点构成有且仅有n条边的单个环
直接构造就好
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define lson l,mid,rt<<1 4 #define rson mid+1,r,rt<<1|1 5 #define sqr(x) ((x)*(x)) 6 #define maxn 1000010 7 typedef long long ll; 8 /*#ifndef ONLINE_JUDGE 9 freopen("1.txt","r",stdin); 10 #endif */ 11 int fa[55]; 12 int d[55]; 13 vector<pair<int,int> > ve,ans; 14 int Find(int x){ 15 int r=x,y; 16 while(x!=fa[x]){ 17 x=fa[x]; 18 } 19 while(r!=x){ 20 y=fa[r]; 21 fa[r]=x; 22 r=y; 23 } 24 return x; 25 } 26 void join(int x,int y) 27 { 28 int xx=Find(x); 29 int yy=Find(y); 30 if(xx!=yy) fa[xx]=yy; 31 } 32 int main(){ 33 int n,m; 34 cin>>n>>m; 35 int v,u; 36 for(int i=1;i<=n;i++) fa[i]=i; 37 for(int i=1;i<=m;i++){ 38 cin>>u>>v; 39 ve.push_back(make_pair(u,v)); 40 join(u,v); 41 d[v]++,d[u]++; 42 if(d[u]>2||d[v]>2){ 43 cout<<"NO"<<endl; 44 return 0; 45 } 46 } 47 for(int i=1;i<=n;i++){ 48 for(int j=1;j<i;j++){ 49 if(d[j]<=1&&d[i]<=1&&Find(i)!=Find(j)) 50 { 51 ans.push_back(make_pair(j,i)); 52 join(i,j); 53 d[i]++,d[j]++; 54 } 55 } 56 } 57 for(int i=1;i<=n;i++){ 58 if(d[i]!=2){ 59 for(int j=1;j<i;j++){ 60 if(d[j]==1){ 61 ans.push_back(make_pair(j,i)); 62 join(i,j); 63 d[i]++,d[j]++; 64 } 65 } 66 } 67 } 68 for(int i=1;i<=n;i++) 69 if(d[i]==0)ans.push_back(make_pair(i,i)); 70 int p = Find(1); 71 for(int i=1;i<=n;i++) 72 if(Find(i)!=p){ 73 cout<<"NO"<<endl; 74 return 0; 75 } 76 cout<<"YES"<<endl; 77 cout<<ans.size()<<endl; 78 for(int i=0;i<ans.size();i++) 79 cout<<ans[i].first<<" "<<ans[i].second<<endl; 80 }
posted on 2019-02-04 20:08 Fighting_sh 阅读(183) 评论(0) 编辑 收藏 举报