Code jam 2022 Round 1C Squary

https://codingcompetitions.withgoogle.com/codejam/round/0000000000877b42/0000000000afdf76#problem

数学题,利用和的平方与平方的和以及交叉项的关系求解。

可以在k<=2的范围内得到一个有效的解。

复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int m_index = 0;

LL BinarySearch(LL l, LL r, bool up, LL sum, LL square_sum)
{
    while (l <= r)
    {
        LL mid = (r - l) / 2 + l;
        if ((sum + mid)*(sum + mid) == square_sum + mid * mid)
            return mid;
        else if ((sum + mid)*(sum + mid) > square_sum + mid * mid)
        {
            if (up)
                r = mid - 1;
            else
                l = mid + 1;
        }
        else
        {
            if (up)
                l = mid + 1;
            else
                r = mid - 1;
        }
    }
    return 0;
}
void YD()
{
    m_index++;

    int n, k;
    cin >> n >> k;

    vector<LL> nums(n);
    for (int i = 0; i < n; i++)
    {
        cin >> nums[i];
    }
    LL sum = 0;
    LL squre_sum = 0;
    for (int i = 0; i < n; i++)
    {
        sum += nums[i];
        squre_sum += (nums[i] * nums[i]);
    }
    if (sum*sum == squre_sum)
    {

        cout << "Case #" << m_index << ": " << 0 << endl;
        return;

    }
    if (sum == 0)
    {
        
        cout << "Case #" << m_index << ": " << "IMPOSSIBLE" << endl;
        return;

        
    }
    LL res = 0;
    res = (squre_sum - sum * sum) / 2 / sum;

    if((sum+ res)*(sum+ res)==squre_sum+res*res)
    {

        cout << "Case #" << m_index << ": " << res << endl;
        return;

    }
    else
    {
        if(k==1)
        cout << "Case #" << m_index << ": " << "IMPOSSIBLE" << endl;
        else
        {

            LL n1=1-sum;
            sum+=n1;
            squre_sum+=n1*n1;
            LL sp=(sum*sum-squre_sum)/2;
            LL n2=-sp;
            cout << "Case #" << m_index << ": " <<n1<<' '<<n2<<endl;
        }
    }
    


}
int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        YD();
    }
}
View Code
复制代码

 

posted @   80k  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示