• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LyonLys
愿意在角落唱沙哑的歌 再大声也都是给你 请用心听 不要说话 Contact me via E-mail: lyon.lys@gmail.com
博客园    首页    新随笔    联系   管理    订阅  订阅

zoj 3629 Treasure Hunt IV

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4775

  看yh大佬的课件的时候看到这题找规律的题,于是我就做了一下。原本我还想在函数开头先加1,结果没发现加1以后就溢出了,所以wa了一次,改过来就好。

  题意简单,主要是要打表出来,发现一个规律,n^2-1和n^2的布尔值是不同的,所以只要一个等差数列求和就可以分别求出0到a-1和0到b的值了。

View Code
 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cmath>
 4 #include <cstring>
 5 
 6 typedef long long ll;
 7 const double eps = 1e-6;
 8 
 9 ll deal(ll n){
10     if (n == -1) return 0;
11     ll r = (ll)sqrt((double) n + 1 + eps);
12     if (r & 1){
13         r = (r + 1) >> 1;
14         return ((r << 1) - 1) * r;
15     }
16     else{
17         return n - r * r + (r >> 1) * (r - 1) + 1;
18     }
19 }
20 
21 int main(){
22     ll n, m;
23 
24     while (~scanf("%lld%lld", &n, &m)){
25         printf("%lld\n", deal(m) -  deal(n - 1));
26     }
27 
28     return 0;
29 }

  

  十分简短,算是十分基础的规律题了!

 

——written by Lyon

posted @ 2012-08-26 20:59  LyonLys  阅读(185)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3