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;
}
相关推荐
Ricky_Theseus1 小时前
C++右值引用
java·开发语言·c++
吴梓穆1 小时前
UE5 c++ 常用方法
java·c++·ue5
云栖梦泽1 小时前
Linux内核与驱动:9.Linux 驱动 API 封装
linux·c++
Morwit2 小时前
【力扣hot100】 1. 两数之和
数据结构·c++·算法·leetcode·职场和发展
SpiderPex2 小时前
第十七届蓝桥杯 C++ B组-题目 (最新出炉 )
c++·职场和发展·蓝桥杯
炘爚2 小时前
C++ 右值引用与程序优化
开发语言·c++
si莉亚3 小时前
ROS2安装EVO工具包
linux·开发语言·c++·开源
智者知已应修善业3 小时前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
良木生香3 小时前
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载
开发语言·c++
小此方3 小时前
Re:从零开始的 C++ 进阶篇(三)彻底搞懂 C++ 多态:虚函数、虚表与动态绑定的底层原理
c++