Codeforces 1173B Nauuo and Chess(greedy)

布满荆棘的人生 2022-01-21 04:49 273阅读 0赞

B.Nauuo and Chess

题意:棋盘是一个正方形,让你放n个旗子满足 |ri−rj|+|ci−cj|≥|i−j|. 问你棋盘最小多大。

题解:贪心。
从第一个开始放,满足公式,让1-n旗子紧挨着,从(1,1)开始,然后先让n/2+1前的棋子纵坐标相同,后面的棋子横坐标相同,这样好看,你看纵坐标相同的棋子紧挨着所以他们|i-j|只差1,他们的坐标差纵坐标相同,横坐标只差一;横坐标相同的同理,不挨着的棋子也会满足公式,因为你是从第一个贪心过来的,把不相邻的一直往前推,总会碰到的。
所以最小棋盘边长为n/2+1。棋子摆放为正方形的相邻两边。
AC代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<map>
  5. #include<algorithm>
  6. using namespace std;
  7. typedef long long ll;
  8. const int mmax=1e6+10;
  9. const int eps=1e-8;
  10. ll a[mmax],b[mmax];
  11. int main()
  12. {
  13. ll a;
  14. while(cin>>a)
  15. {
  16. cout<<a/2+1<<endl;
  17. for(int i=1;i<a/2+1;i++)
  18. cout<<i<<" "<<"1"<<endl;
  19. for(int i=a/2+1,j=1;i<=a;i++,j++)
  20. cout<<a/2+1<<" "<<j<<endl;
  21. }
  22. return 0;
  23. }

发表评论

表情:
评论列表 (有 0 条评论,273人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Codeforce--414B--Mashmokh and ACM

    一开始以为是数论的题目,推了半天感觉毫无规律,而且越来越复杂(可能是我智商太低-\_-|||)先把它放到一边去了。而后回来再看还是毫无思路。 去看了下别人的提示,竟发现是dp