Fibsieve`s Fantabulous Birthday LightOJ - 1008(水,但是有点坑)

Fibsieve`s Fantabulous Birthday(水,但是有点坑)

题目链接
在这里插入图片描述

开始一看数据就知道打表什么的都绝对不行了,但是没有去仔细看时间限制,就打算:
如果s不是完全平方数,则找到它对应的比它大的最小的完全平方数
如果是完全平方数那就简单了:直接通过判断奇偶来确定它是x= =1 还是 y= =1

由于可能它会转弯,例如:s==19时,如果只是找到25然后x–,这肯定是行不通的,也就是要转弯

开始想到的是用个小循环(就死上了没仔细看题目的当)时间限制为0.5s,肯定这样会TLE

还踩了一个小坑,这个是低级错误,前面的Case都没加,我也是佛了自己

最终修改终于A了,这个水题搞的心态有点崩。。。。。。。。。。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#define ll long long
using namespace std;
int main(){
    int t;
    ll s;
    ll x,y;
    scanf("%d",&t);
    for(int k=1;k<=t;k++){
        scanf("%lld",&s);
        ll num=sqrt(s);
        //cout<<num<<endl;
        if(num*num==s){
            if(num%2==1){
                printf("Case %d: 1 %lld\n",k,num);
            }
            else
            {
                printf("Case %d: %lld 1\n",k,num);
            }
            continue;
        }
        //cout<<num<<endl;
        ll cnt=num+1;
        if(cnt%2==1){
            x=1;
            y=cnt;
            ll n=cnt*cnt-s;
            if(n<cnt){
                x=n+1;
            }
            else{
                x=cnt;
                y=cnt-(n-cnt)-1;
            }
        }
        else{
            y=1;
            x=cnt;
            ll n=cnt*cnt-s;
            if(n<cnt){
                y=n+1;
            }
            else{
                y=cnt;
                x=cnt-(n-cnt)-1;
            }
        }
        printf("Case %d: %lld %lld\n",k,x,y);
    }
    return 0;
}

在这里插入图片描述

这个0秒就看的很舒服

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值