C++:Find Coins

Eva 喜欢收集来自宇宙各地的硬币,包括火星等其他星球的硬币。一天她来到一家可以接受各种硬币支付的商场。但这里对付款有特殊要求:每笔账单必须恰好使用两枚硬币来支付精确金额。由于她带了多达 105105 枚硬币,她需要你的帮助。对于任意给定的支付金额,你需要告诉她是否能找到两枚硬币来支付。

输入规格:

每个输入文件包含一个测试用例。每个测试用例的第一行包含两个正整数:NN(≤105≤105,表示硬币总数)和 MM(≤103≤103,表示需支付的金额)。第二行包含 NN 个硬币面值,均为不超过 500 的正整数。行内数字以空格分隔。

输出规格:

对于每个测试用例,输出一行:若存在两枚硬币面值 V1V1​ 和 V2V2​(V1+V2=MV1​+V2​=M 且 V1≤V2V1​≤V2​),则输出 V1 V2V1​V2​。若有多种方案,则输出 V1V1​ 最小的那一对;若无方案,则输出 No Solution

样例输入 1:

复制代码
8 15
1 2 8 7 2 4 11 15

样例输出 1:

复制代码
4 11

样例输入 2:

复制代码
7 14
1 8 7 2 4 11 15

样例输出 2:

复制代码
No Solution

代码:

cpp 复制代码
#include <iostream>
#include <bits/stdc++.h>
#include <cstring>
#include <iomanip>
using namespace std;
vector<int> v;
bool cmp(int a,int b){
    return a<b;
}
int main(){
    int n,m;cin>>n>>m;
    for(int i=0;i<n;++i){
        int k;cin>>k;v.push_back(k);
    }
    sort(v.begin(),v.end(),cmp);
    int flag=0;
    int l=0,r=n-1;
    while(l<r){
        int s=v[l]+v[r];
        if(s<m)l++;
        else if(s>m)r--;
        else{
            cout<<v[l]<<" "<<v[r];
            flag=1;
            break;
        }
    }
    if(!flag)cout<<"No Solution"<<endl;
    return 0;
}
相关推荐
在路上看风景3 分钟前
19. 成员初始化列表和初始化对象
c++
zmzb010313 分钟前
C++课后习题训练记录Day98
开发语言·c++
念风零壹1 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
孞㐑¥2 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
MZ_ZXD0013 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
A星空1234 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
凡人叶枫4 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
会叫的恐龙5 小时前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串
小糯米6015 小时前
C++顺序表和vector
开发语言·c++·算法
独望漫天星辰5 小时前
C++ 多态深度解析:从语法规则到底层实现(附实战验证代码)
开发语言·c++