zoukankan      html  css  js  c++  java
  • [LightOJ1008]Fibsieve`s Fantabulous Birthday 题解

    前言

    扫了一眼网上的题解,都是找规律。
    估计就我一个蒟蒻在打二分。

    题解

    设一个" ┐"形为一层。
    我们二分查找该数在那一层,然后就可以直接计算它的位置了。

    代码

    #include <cstdio>
    
    int main(){
    	int T, cs = 0; scanf("%d", &T);
    	while (T--){
    		long long x; scanf("%lld", &x);
    		long long l = 1, r = 100000000, ans = 1;
    		while (l <= r){
    			long long mid = (l + r) / 2, tmp = (mid & 1) ? mid : mid - 1;
    			long long res = tmp * tmp + !(mid & 1);
    			if (res & 1)
    				res = res - mid * 2 + 2; 
    			if (x >= res)
    				l = mid + 1, ans = mid;
    			else if (x < res)
    				r = mid - 1;
    		}
    		long long tmp = (ans & 1) ? ans : ans - 1;
    		long long res = tmp * tmp + !(ans & 1);
    		if (res & 1)
    			res = res - ans * 2 + 2;
    		long long lft = x - res; printf("Case %d: ", ++cs);
    		if (res & 1){ 
    			long long posx = ans, posy = 1;
    			if (lft < ans)
    				posy += lft;
    			else{
    				posy = ans; lft -= ans - 1;
    				posx -= lft;
    			}
    			printf("%lld %lld
    ", posx, posy);
    		}
    		else{
    			long long posx = 1, posy = ans;
    			if (lft < ans)
    				posx += lft;
    			else{
    				posx = ans; lft -= ans - 1;
    				posy -= lft;
    			}
    			printf("%lld %lld
    ", posx, posy);
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    [JLOI2015] 管道连接
    【知识点】斯坦纳树
    [ZJOI2010] 网络扩容
    【知识点】网络流常见模型
    [NOI2009] 植物大战僵尸
    [NOI2007] 货币兑换
    【知识点】分治相关算法
    [NOI2005] 月下柠檬树
    [HNOI2012] 射箭
    [SDOI2014] 向量集
  • 原文地址:https://www.cnblogs.com/linzhengmin/p/11253843.html
Copyright © 2011-2022 走看看