• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
magicat
博客园    首页    新随笔    联系   管理    订阅  订阅
Educational Codeforces Round 117 (Rated for Div. 2)A-B


本人实力有限,做题范围可能A-D,有错误之处还请指正,不喜勿喷

A

 vp,本来想着是计算几何(做多了,看到坐标就emmmm),想了20分钟,觉得很复杂啊!看了下榜单6000人过了,就知道是想复杂了

暴力枚举坐标上每个点判断符不符合条件

 1 #include<iostream>
 2 #include<string>
 3 #include<cmath>
 4 #include<math.h>
 5 #include<algorithm>
 6 using namespace std;
 7 
 8 void solve()
 9 {
10     int bx,by,dab;
11     cin>>bx>>by;
12     dab=bx+by;
13     if(bx==0&&by==0)
14     {
15         cout<<"0 0"<<endl;
16         return;
17     }
18     for(int x=0;x<=50;x++)
19     {
20         for(int y=0;y<=50;y++)
21         {
22             if(x+y==dab/2&&fabs(x-bx)+fabs(y-by)==dab/2)
23             {
24                 cout<<x<<" "<<y<<endl;
25                 return;
26             }
27         }
28     }
29     cout<<"-1 -1"<<endl;
30     return;
31 }
32 int main()
33 {
34     ios::sync_with_stdio(false);
35     cin.tie(nullptr), cout.tie(nullptr);
36     int t;
37     cin>>t;
38     while(t--)
39     {
40         solve();
41     }
42     return 0;
43 }

---------------------------------------------------------------------------

B

vp的时候看好多人过了,瞬间就轻松,感觉不会太难。 

因为a要是序列左半部分最小,b要是序列右半部分最大

左半部分求法,从大到小枚举

满足:

(1)不是a或b;

(2)左半部分剩下格子不小于1个 

就将i加入左半部分aa,用个p数组标记已经用过。循环结束后再单独将a加入左半部分aa

 

右半部分求法,从大到小枚举

满足:

(1)不是a或b;

(2)右半部分剩下格子不小于1个 ;

(3)未被用过;

就将i加入右半部分bb,循环结束后再单独将b加入右半部分bb

分别遍历aa和bb,比大小判断是否满足条件

输出结果

 1 #include<iostream>
 2 #include<string>
 3 #include<cmath>
 4 #include<math.h>
 5 #include<algorithm>
 6 #include<cstring>
 7 using namespace std;
 8 
 9 void solve()
10 {
11     int n,a,b,p[110],flag=1;
12     cin>>n>>a>>b;    
13     int aa[n/2+1],bb[n/2+1];
14     for(int i=1;i<=n;i++)    p[i]=i;
15     for(int i=n;i>=1;i--)
16     {
17         if(i==a||i==b||flag>(n/2-1))    continue;
18         aa[flag++]=i;
19         p[i]=0;
20     }
21     aa[flag]=a;
22     flag=1;
23     for(int i=1;i<=n;i++)
24     {
25         if(i==a||i==b||flag>(n/2-1))    continue;
26         if(p[i]!=0)
27         {
28             bb[flag++]=i;
29         }
30     }
31     bb[flag++]=b;
32     int k=0;
33     for(int i=1;i<=n/2;i++)
34     {
35         if(aa[i]<a)
36             k=1;
37     }
38     for(int i=1;i<=n/2;i++)
39     {
40         if(bb[i]>b)
41             k=1;
42     }
43     
44     if(k==1)
45     {
46         cout<<-1<<endl;
47         return;
48     }
49     for(int i=1;i<=n/2;i++)
50     {
51         cout<<aa[i]<<" ";
52     }
53     for(int i=1;i<=n/2;i++)
54     {
55         cout<<bb[i]<<" ";
56     }
57     cout<<endl;
58     return;
59 }
60 int main()
61 {
62     ios::sync_with_stdio(false);
63     cin.tie(nullptr), cout.tie(nullptr);
64     int t;
65     cin>>t;
66     while(t--)
67     {
68         solve();
69     }
70     return 0;
71 }

 

本文来自博客园,作者:magicat,转载请注明原文链接:https://www.cnblogs.com/magicat/p/15605008.html

posted on 2021-11-25 21:26  magicat  阅读(26)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3