题解:P11496 [ROIR 2019 Day 1] 完全平方

· · 题解

Solution

本题分为几种情况讨论:

如果k=0输出0

如果k>0那么把\sqrt k1的部分枚举一遍即可

如果k<0k 取绝对值,和 k>0 一样,只不过最后需要取相反值

一定要加none的情况!!!

AC code


#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int k;
signed main()
{
    cin>>k;
    if(k==0){
        cout<<0;//特判
        return 0;//注意要结束,不然第一个样例就错!!
    }
    else{
        for(int i=sqrt(abs(k));i>0;i--){
            if(k%i==0&&i%2==(abs(k)/i)%2){
                if(k>0)cout<<(k/i+i)/2;
                if(k<0) cout<<(-k/i-i)/2;
                return 0;//不管什么时候都要加结束
            }
        }
    }
    cout<<"none"<<endl;//没有的情况
    return 0;
}//完结撒花