新生27场

数对:

我们有 A 和 B 两个正整数,同时如果能找到 n 和 m 两个正整数满足下面的条件:
  • n+ m = A
  • n × m= B
我们就称这样的 A 和 B 是奇异数。现在给你 T 组 A 和 B,每组都要计算这样满足这样条件的 n 和 m 有多少对?
注意:n 大于 m 或者 m 大于 n 或者 m 等于 n 都可以。


输入

输入的第一行是一个整数 T,表示 A 和 B 的组数。
接下来 T 行,每行有两个整数 A 和 B。


输出

输出有 T 行,对于每组 A 和 B,输出使得它们成为奇异数的正整数 n 和 m 有多少对。

样例输入 Copy

【输入样例1】
1
5 6

【输入样例2】
2
3 2
1000000000000 1

【输入样例3】
6
1908 444992
1925 553696
1881 878378
5460 514944
1172 268867
2652 702121

样例输出 Copy

【输出样例1】
2

【输出样例2】
2
0

【输出样例3】
2
2
2
2
2
0

提示

【样例1解释】
这里只有一组 A 和 B,满足条件的 n 和 m 有 2 对,分别是 n= 2,m = 3 和n= 3,m = 2 。



【样例2解释】
这里有 2 组 A,B,第 1 个答案是 2,第 2 个答案是 0。

【数据规模】
对于 100% 的数据,保证 1 ≤ A,B ≤ 1012,1 ≤ T ≤ 100。
这个题吧,因为乘除法会有误差一开始我是拿的加法来写,结果超时。用乘法把数据都列出来才知道,可能会有不能整除的情况,但是除法只是保留了商的形式,就会容易多解,所以增加一个判断条件
还是超时。因为他数据两边是对称的,可以直接乘2,我当时第一次做就想到这个地方,答案是错的,就没继续下去了。。。但其实还有一个,就是不能直接乘2,平方数例如16就只有4*4一种情况
这个就是例外了,需要考虑。
复制代码
#include<iostream>
typedef long long int ll;
using namespace std;
int main(){
    ll t;
    cin>>t;
    while(t--)
    {
        ll a,b,sum=0;
        cin>>a>>b;
        for(int i=1;i<=b/i;i++)
        {
            if(b%i==0&&i+b/i==a)
            {
                if(b/i==i)
                    sum++;
                else
                    sum+=2;
            }
        }
        cout<<sum<<endl;
    }
}
复制代码

兔子

从左往右有100000001个整数点,分别是整数点0至整数点100000000。有n只兔子,第i只兔子在整数点d[i]。你需要选择一个整数点作为喂食点,所有兔子都要走到这个整数点进食。应该如何选择喂食点,才能使得所有兔子走过的总路程最小?输出最小的总路程。

输入

第一行,一个整数。1<=n<=20。
第二行,共n个整数,第i个整数是d[i]。0<=d[i]<=100000000。

输出

一个整数

样例输入 Copy

【样例1】
3
5 9 1
【样例2】
4
5 9 1 8

样例输出 Copy

【样例1】
8
【样例2】
11

提示

对于60%的数据, 1<=n<=3且0<=d[i]<=10。
对于80%的数据, 1<=n<=10且0<=d[i]<=100。
我被这题骗到了啊啊啊啊。数据范围真的没那么大,我一开始开了10^8的数组,运行错误哈哈,但是你看,仔细读题仔细读题!
复制代码
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int a[10010];
int main(){
    long long int n,sum=0;
    cin>>n;
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    if(n%2==1)
    {
        for(int i=1;i<=n;i++)
            sum=sum+abs(a[n/2+1]-a[i]);
    }
    else
    {
        for(int i=1;i<=n;i++)
            sum=sum+abs(a[i]-a[n/2]);
    }
    cout<<sum<<endl;
    return 0;
}
复制代码

糖果:

题目描述

有n个小朋友,有m袋糖果,第i袋的糖果数量是a[i]。已知n<=m<2n。每个小朋友至少要有一袋糖果,至多只能要两袋糖果。分配的目标是把这m袋糖果全部分完,而且要使得每个小朋友最终得到的糖果数量都是相等的。如果可以做到则输出”possible”,如果做不到则输出”impossible”。注意:不能拆开一个袋子的糖果,必须整袋整袋的分配。

输入

第一行,一个正整数R,表示有R组测试数据。1<=R<=10。
每组测试数据的格式是:
第一行,两个整数n和m。1<=n<=50。n<=m<2n。
第二行,m个整数,第i个整数是a[i]。1<=a[i]<=1000。

输出

共R行,每行一个字符串,”possible”或者”impossible”,双引号不用输出。

样例输入 Copy

4
1 1
47 
3 5
10 8 10 1 1 
3 5
3 9 10 7 1 
6 11
1 1 1 2 1 1 1 1 1 1 1 

样例输出 Copy

possible
impossible
possible
possible
这题一位大佬的想法很巧妙啊,每个小朋友分得的糖果数是一样的,且最多是两袋,这句话很关键。在A数组里面直接看数量,如果是奇数个(不可能为一袋,一袋在第一轮就已经分好了),所以在第二轮就是只能两袋两袋来
分,直接看是不是2的倍数就好了,如果是,排序之后,再看看是否可以均分,每个小朋友分得的糖果数一样。
复制代码
#include<iostream>
#include<vector>
#include<algorithm>
typedef long long int ll;
using namespace std;
int c[1000010];
int main(){
    int t;
    cin>>t;
    while(t--)
    {
        int a,b,sum=0;
        cin>>a>>b;
        vector<int> A;
        for(int i=0;i<b;i++)
        {
            cin>>c[i];
            sum=sum+c[i];
        }
        if((sum%a)!=0)
            cout<<"impossible"<<endl;
        else
        {
            ll ave=sum/a;
            for(int i=0;i<b;i++)
            {
                if(c[i]!=ave)
                    A.push_back(c[i]);
            }
            int len=A.size();
            if((len%2)==1)
                cout<<"impossible"<<endl;
            else
            {
                int flat=1;
                sort(A.begin(),A.end());
                for(int i=0;i<len;i++)
                {
                    if(A[i]+A[len-i-1]!=ave)
                    {
                        flat=0;
                        cout<<"impossible"<<endl;
                        break;
                    }
                }
                if(flat)
                    cout<<"possible"<<endl;
            }
        }
        A.clear();
    }
    return 0;
}
复制代码
posted @   小志61314  阅读(298)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示