Codeforces Round #544 (Div. 3) (补)

D:没有注意到a==0&&b==0的情况,把自己卡崩了。对于数学公式推导一定要注意关于0的特殊情况,不可以少

  1 #include <iostream>
  2 #include <cstring>
  3 #include <string>
  4 #include <map>
  5 #include <set>
  6 #include <algorithm>
  7 #include <fstream>
  8 #include <cstdio>
  9 #include <cmath>
 10 #include <stack>
 11 #include <queue>
 12 #define lson l,m,rt<<1
 13 #define rson m+1,r,rt<<1|1
 14 using namespace std;
 15 const double Pi=3.14159265358979323846;
 16 typedef long long ll;
 17 const int MAXN=200000+5;
 18 const int dx[5]={0,0,0,1,-1};
 19 const int dy[5]={1,-1,0,0,0};
 20 const int INF = 0x3f3f3f3f;
 21 const int NINF = 0xc0c0c0c0;
 22 const ll mod=1e9+7;
 23 struct node
 24 {
 25     int a,b;
 26     long double c;
 27 }d[MAXN];
 28 
 29 bool cmp(node a,node b)
 30 {
 31     return abs(a.a)<abs(b.a);
 32 }
 33 
 34 bool cmp2(node a,node b)
 35 {
 36     return a.c<b.c;
 37 }
 38 
 39 int main()
 40 {
 41     int n;scanf("%d",&n);
 42     for(int i=1;i<=n;i++)
 43     {
 44         scanf("%d",&d[i].a);
 45     }
 46         for(int i=1;i<=n;i++)
 47     {
 48         scanf("%d",&d[i].b);
 49     }
 50     int cnts=0;
 51     for(int i=1;i<=n;i++)
 52     {
 53         if(d[i].a==0&&d[i].b==0) cnts++;
 54         
 55         if(d[i].a!=0) 
 56             d[i].c=d[i].b*1.0/d[i].a;
 57         else d[i].c=0;
 58     }
 59     sort(d+1,d+n+1,cmp);
 60     int t=1;
 61     for(int i=1;i<=n;i++)
 62     {
 63         if(d[i].a==0) continue;
 64         else
 65         {
 66             t=i;
 67             break;
 68         }    
 69     }
 70     if(d[n].a==0) 
 71     {
 72         cout << cnts<<endl;
 73         return 0;
 74     }
 75 //    cout <<t<<endl;
 76 /*    for(int i=t;i<=n;i++)
 77     {
 78         cout <<d[i].c<<" ";
 79     }*/
 80     sort(d+t,d+n+1,cmp2);
 81     /*for(int i=t;i<=n;i++)
 82     {
 83         cout <<d[i].c<<" ";
 84     }*/
 85     int ans=1;int cnt=1;long double x=d[t].c;
 86     for(int i=t+1;i<=n;i++)
 87     {
 88         if(d[i].c==x)
 89         {
 90             cnt++;
 91             ans=max(ans,cnt);
 92         }
 93         else
 94         {
 95             x=d[i].c;
 96             cnt=1;
 97         }
 98     }
 99     cout <<ans+cnts<<endl;
100     return 0;
101 }
View Code

F1:被D心态搞崩,然后F1比赛的时候读不懂题,Your task is to find any spanning tree of this graph such that the maximum degree over all vertices is maximum possible这句话半天理解不了,下来问,才知道直接简单bfs就可以了,然后忘了bfs咋写,写了好长时间(太菜了)

 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <map>
 5 #include <set>
 6 #include <algorithm>
 7 #include <fstream>
 8 #include <cstdio>
 9 #include <cmath>
10 #include <stack>
11 #include <queue>
12 #define lson l,m,rt<<1
13 #define rson m+1,r,rt<<1|1
14 using namespace std;
15 const double Pi=3.14159265358979323846;
16 typedef long long ll;
17 const int MAXN=200000+5;
18 const int dx[5]={0,0,0,1,-1};
19 const int dy[5]={1,-1,0,0,0};
20 const int INF = 0x3f3f3f3f;
21 const int NINF = 0xc0c0c0c0;
22 const ll mod=1e9+7;
23 int dis[MAXN];
24 vector <int> G[MAXN];
25 
26 void bfs(int M)
27 {
28     queue <int> Q;
29     Q.push(M);
30     dis[M]=1;
31     while(!Q.empty())
32     {
33         int F=Q.front();Q.pop();
34             
35             for(int i=0;i<G[F].size();i++)
36             {
37                 if(dis[G[F][i]]==0)
38                 {
39                     printf("%d %d\n",F,G[F][i]);
40                     Q.push(G[F][i]);
41                     dis[G[F][i]]=1;
42                 }
43             }
44     } 
45 }
46 int main()
47 {
48     int n,m;
49     scanf("%d%d",&n,&m);
50     for(int i=1;i<=m;i++)
51     {
52         int a,b;scanf("%d%d",&a,&b);
53         G[a].push_back(b);
54         G[b].push_back(a);
55     }
56     int Msize=0;int M=1;
57     for(int i=1;i<=n;i++)
58     {
59         if(G[i].size()>Msize) 
60         {
61             Msize=G[i].size();
62             M=i;
63         }
64     }
65     bfs(M);
66     return 0;
67 }
View Code

现在还是一碰见图和树的问题就发怵。

E:还没写出来

posted @ 2019-03-09 15:51  Chuhanjing  阅读(137)  评论(0编辑  收藏  举报