AtCoder Beginner Contest 304

A:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<string>
 6 #include<vector>
 7 #include<stack>
 8 #include<bitset>
 9 #include<cstdlib>
10 #include<cmath>
11 #include<set>
12 #include<list>
13 #include<deque>
14 #include<map>
15 #include<queue>
16 #include <iomanip>
17 #include<ctime>
18 using namespace std;
19 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
20 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
21 #define int long long 
22 #define double long double
23 #define endl '\n'
24 #define inf LLONG_MAX
25 #define iinf INT_MAX
26 typedef pair<int,int> PII;
27 const double PI = acos(-1.0);
28 const double eps = 1e-6;
29 const int INF = 0x3f3f3f3f;
30 const int N = 1e2+10;
31 struct node
32 {
33     string id;
34     int age;
35 }p[N];
36 int n;
37 signed main()
38 {
39     IOS;
40     cin>>n;
41     int idx=inf;
42     int sx=0;
43     for(int i=1;i<=n;i++)
44     {
45         cin>>p[i].id>>p[i].age;
46         if(p[i].age<idx)
47         {
48             sx=i;
49             idx=p[i].age;
50         }
51     }
52     for(int i=sx;i<=n;i++)
53     {
54         cout<<p[i].id<<endl;
55     }
56     for(int i=1;i<sx;i++)
57     {
58         cout<<p[i].id<<endl;
59     }
60     return 0;
61 }

B:

数字的后几位截取不如直接处理字符串

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<string>
 6 #include<vector>
 7 #include<stack>
 8 #include<bitset>
 9 #include<cstdlib>
10 #include<cmath>
11 #include<set>
12 #include<list>
13 #include<deque>
14 #include<map>
15 #include<queue>
16 #include <iomanip>
17 #include<ctime>
18 using namespace std;
19 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
20 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
21 #define int long long 
22 #define double long double
23 #define endl '\n'
24 #define inf LLONG_MAX
25 #define iinf INT_MAX
26 typedef pair<int,int> PII;
27 const double PI = acos(-1.0);
28 const double eps = 1e-6;
29 const int INF = 0x3f3f3f3f;
30 const int N = 1e9;
31 int n;
32 void solved(int x)
33 {
34     string s=to_string(x);
35     if(x<=1e3-1)
36     {
37         cout<<x<<endl;
38     }
39     else if(x>=1e3&&x<=1e4-1)
40     {
41         for(int i=0;i<s.length()-1;i++)
42         {
43             cout<<s[i];
44         }
45         cout<<"0"<<endl;
46     }
47     else if(x>=1e4&&x<1e5)
48     {
49         for(int i=0;i<s.length()-2;i++)
50         {
51             cout<<s[i];
52         }
53         cout<<"00"<<endl;
54     }
55     else if(x>=1e5&&x<1e6)
56     {
57         for(int i=0;i<s.length()-3;i++)
58         {
59             cout<<s[i];
60         }
61         cout<<"000"<<endl;
62     }
63     else if(x>=1e6&&x<1e7)
64     {
65         for(int i=0;i<s.length()-4;i++)
66         {
67             cout<<s[i];
68         }
69         cout<<"0000"<<endl;
70     }
71     else if(x>=1e7&&x<1e8)
72     {
73         for(int i=0;i<s.length()-5;i++)
74         {
75             cout<<s[i];
76         }
77         cout<<"00000"<<endl;
78     }
79     else if(x>=1e8&&x<1e9)
80     {
81         for(int i=0;i<s.length()-6;i++)
82         {
83             cout<<s[i];
84         }
85         cout<<"000000"<<endl;
86     }
87 }
88 signed main()
89 {
90     IOS;
91     cin>>n;
92     solved(n);
93     return 0;
94 }

C:

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<algorithm>
  4 #include<iostream>
  5 #include<string>
  6 #include<vector>
  7 #include<stack>
  8 #include<bitset>
  9 #include<cstdlib>
 10 #include<cmath>
 11 #include<set>
 12 #include<list>
 13 #include<deque>
 14 #include<map>
 15 #include<queue>
 16 #include <iomanip>
 17 #include<ctime>
 18 using namespace std;
 19 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 20 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
 21 #define int long long 
 22 #define double long double
 23 #define x first
 24 #define y second
 25 #define endl '\n'
 26 #define inf LLONG_MAX
 27 #define iinf INT_MAX
 28 typedef pair<int,int> PII;
 29 const double PI = acos(-1.0);
 30 const double eps = 1e-6;
 31 const int INF = 0x3f3f3f3f;
 32 const int N = 2e3+10;
 33 int n,d;
 34 PII a[N];
 35 bool vis[N][N];
 36 bool flag[N];
 37 // void bfs(int tx,int ty,int id)
 38 // {
 39     // vis[id]=true;
 40     // queue<PII>q;
 41     // q.push({tx,ty});
 42     // while(!q.empty())
 43     // {
 44         // int px=q.front().x;
 45         // int py=q.front().y;
 46         // q.pop();
 47         // for(int i=id+1;i<=n;i++)
 48         // {
 49             // int nx=a[i].x;
 50             // int ny=a[i].y;
 51             // if(vis[i])    continue;
 52             // if(((px-nx))*(px-nx)+(py-ny)*(py-ny)>d*d)    continue;
 53             // id=i;
 54             // vis[i]=true;
 55             // q.push({nx,ny});
 56         // }
 57     // }
 58 // }
 59 void bfs(int tx,int ty,int id)
 60 {
 61     flag[id]=true;
 62     queue<int>q;
 63     q.push(id);
 64     while(!q.empty())
 65     {
 66         int px=q.front();
 67         q.pop();
 68         for(int i=1;i<=n;i++)
 69         {
 70             if(!flag[i]&&vis[px][i])
 71             {
 72                 flag[i]=true;
 73                 q.push(i);
 74             }
 75         }
 76     }
 77 }
 78 signed main()
 79 {
 80     IOS;
 81     cin>>n>>d;
 82     for(int i=1;i<=n;i++)
 83     {
 84         cin>>a[i].x>>a[i].y;
 85     }
 86     int xx=a[1].x;
 87     int yy=a[1].y;
 88     for(int i=1;i<=n;i++)
 89     {
 90         for(int j=1;j<=n;j++)
 91         {
 92             if((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)<=d*d)
 93             {
 94                 vis[i][j]=true;
 95             }
 96         }
 97     }
 98     bfs(xx,yy,1);
 99     for(int i=1;i<=n;i++)
100     {
101         if(!flag[i])
102         {
103             cout<<"No"<<endl;
104         }
105         else
106         {
107             cout<<"Yes"<<endl;
108         }
109     }
110     return 0;
111 }

D:

// 已知蛋糕总尺寸,w*h,切块时:w边以a[1]、a[2]、、、、a[A]切;h边以b[1]、、、、b[B]切

// 求哪一块蛋糕草莓最多、最少草莓数;

 

 

// 根据每个草莓出现的位置找到符合该草莓的区域块边界,

// 使用lower_bound()找到最右边界,因为lower_bound()是不小于目标值的第一个数,使用map记录出现的边界坐标,

// 即mx=次数最多的,mn判断是否为0则看map中长度是否为(a+1)*(B+1),若是,则不存在草莓数为0的块出现。以最右边界为该块标志。

 

 1 // 已知蛋糕总尺寸,w*h,切块时:w边以a[1]、a[2]、、、、a[A]切;h边以b[1]、、、、b[B]切
 2 // 求哪一块蛋糕草莓最多、最少草莓数;
 3 // 根据每个草莓出现的位置找到符合该草莓的区域块边界,
 4 // 使用lower_bound()找到最右边界,因为lower_bound()是不小于目标值的第一个数,使用map记录出现的边界坐标,
 5 // 即mx=次数最多的,mn判断是否为0则看map中长度是否为(a+1)*(B+1),若是,则不存在草莓数为0的块出现。以最右边界为该块标志。
 6 #include<cstdio>
 7 #include<cstring>
 8 #include<algorithm>
 9 #include<iostream>
10 #include<string>
11 #include<vector>
12 #include<stack>
13 #include<bitset>
14 #include<cstdlib>
15 #include<cmath>
16 #include<set>
17 #include<list>
18 #include<deque>
19 #include<map>
20 #include<queue>
21 #include <iomanip>
22 #include<ctime>
23 using namespace std;
24 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
25 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
26 #define int long long 
27 #define double long double
28 #define endl '\n'
29 #define x first
30 #define y second
31 #define inf LLONG_MAX
32 #define iinf INT_MAX
33 typedef pair<int,int> PII;
34 const double PI = acos(-1.0);
35 const double eps = 1e-6;
36 const int INF = 0x3f3f3f3f;
37 const int N = 2e5+10;
38 int h,w;
39 int n;
40 int maxx=-1;
41 int minn=inf;
42 PII q[N];
43 int a[N];
44 int b[N];
45 map<PII,int>mp;
46 signed main()
47 {
48     IOS;
49     cin>>h>>w;
50     cin>>n;
51     for(int i=1;i<=n;i++)
52     {
53         cin>>q[i].x>>q[i].y;
54     }
55     int A;
56     cin>>A;
57     for(int i=1;i<=A;i++)
58     {
59         cin>>a[i];
60     }
61     int B;
62     cin>>B;
63     for(int i=1;i<=B;i++)
64     {
65         cin>>b[i];
66     }
67     for(int i=1;i<=n;i++)
68     {
69         int px=lower_bound(a+1,a+1+A,q[i].x)-a;
70         int py=lower_bound(b+1,b+1+B,q[i].y)-b;
71         mp[{px,py}]++;
72     }
73     int cnt=0;
74     for(auto &it:mp)
75     {
76         maxx=max(maxx,it.y);
77         minn=min(minn,it.y);
78         cnt++;
79     }
80     if(cnt<(A+1)*(B+1))
81     {
82         minn=0;
83     }
84     cout<<minn<<" "<<maxx<<endl;
85     return 0;
86 }

 

E:

使用并查集维护更方便一些

 

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<algorithm>
  4 #include<iostream>
  5 #include<string>
  6 #include<vector>
  7 #include<stack>
  8 #include<bitset>
  9 #include<cstdlib>
 10 #include<cmath>
 11 #include<set>
 12 #include<list>
 13 #include<deque>
 14 #include<map>
 15 #include<queue>
 16 #include <iomanip>
 17 #include<ctime>
 18 using namespace std;
 19 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 20 #define TLE (double)clock()/CLOCKS_PER_SEC<=0.95
 21 #define int long long 
 22 #define double long double
 23 #define endl '\n'
 24 #define inf LLONG_MAX
 25 #define iinf INT_MAX
 26 typedef pair<int,int> PII;
 27 const double PI = acos(-1.0);
 28 const double eps = 1e-6;
 29 const int INF = 0x3f3f3f3f;
 30 const int N = 2e5+10;
 31 int n,m;
 32 vector<int>g[N];
 33 int a[N],b[N];
 34 int s[N];
 35 int height[N];
 36 set<PII>ss;//表示不能被相互到达的
 37 void init()//合并
 38 {
 39     for( int i=1;i<=N;i++)
 40     {
 41         s[i]=i;
 42         height[i]=0;
 43     }
 44 }
 45 int find_s(int x)//查找 -路压
 46 {
 47     if(x!=s[x])
 48     {
 49         s[x]=find_s(s[x]);
 50     }
 51     return s[x];
 52 }
 53 void union_s(int x,int y)//合并优化
 54 {
 55     x=find_s(x);
 56     y=find_s(y);
 57     if(height[x]==height[y])
 58     {
 59         height[x]=height[x]+1;
 60         s[y]=x;
 61     }
 62     if(height[x]<height[y])
 63     {
 64         s[x]=y;
 65     }
 66     else
 67     {
 68         s[y]=x;
 69     }
 70 }
 71 signed main()
 72 {
 73     IOS;
 74     init();
 75     bool flag=true;
 76     cin>>n>>m;
 77     for(int i=1;i<=m;i++)
 78     {
 79         int u,v;
 80         cin>>u>>v;
 81         g[u].push_back(v);
 82         g[v].push_back(u);
 83         union_s(u,v);
 84         union_s(v,u);
 85     }
 86     int k;
 87     cin>>k;
 88     for(int i=1;i<=k;i++)
 89     {
 90         cin>>a[i]>>b[i];
 91         int fx=find_s(a[i]);
 92         int fy=find_s(b[i]);
 93         ss.insert({fx,fy});
 94         ss.insert({fy,fx});
 95     }
 96     int q;
 97     cin>>q;
 98     while(q--)
 99     {
100         int u,v;
101         cin>>u>>v;
102         int fx=find_s(u);
103         int fy=find_s(v);
104         if(ss.count({fx,fy}))
105         {
106             cout<<"No"<<endl;
107         }
108         else{
109             cout<<"Yes"<<endl;
110         }
111     }
112     return 0;
113 }

 

posted @ 2023-07-05 22:37  江上舟摇  阅读(10)  评论(0编辑  收藏  举报