zoukankan      html  css  js  c++  java
  • PTA(Advanced Level)1048.Find Coins

    Eva loves to collect coins from all over the universe, including some other planets like Mars. One day she visited a universal shopping mall which could accept all kinds of coins as payments. However, there was a special requirement of the payment: for each bill, she could only use exactly two coins to pay the exact amount. Since she has as many as 105 coins with her, she definitely needs your help. You are supposed to tell her, for any given amount of money, whether or not she can find two coins to pay for it.

    Input Specification:

    Each input file contains one test case. For each case, the first line contains 2 positive numbers: N (≤105, the total number of coins) and M (≤103, the amount of money Eva has to pay). The second line contains N face values of the coins, which are all positive numbers no more than 500. All the numbers in a line are separated by a space.

    Output Specification:

    For each test case, print in one line the two face values V1 and V2 (separated by a space) such that V1+V2=M and V1≤V2. If such a solution is not unique, output the one with the smallest V1. If there is no solution, output No Solution instead.

    Sample Input 1:
    8 15
    1 2 8 7 2 4 11 15
    
    Sample Output 1:
    4 11
    
    Sample Input 2:
    7 14
    1 8 7 2 4 11 15
    
    Sample Output 2:
    No Solution
    
    思路
    • 说白了这一题就是寻找两数使得和为定值,如果是两重循环遍历找面对这么大的数据是肯定要超时的
    • 比较好的一个想法就是用键值对,也就是map容器,假设目前遍历到的值为t,我们要查询的是m-t是否存在数组里,用map查询代替一个for循环会快很多,这题在Leetcode上也是有类似的
    代码
    #include<bits/stdc++.h>
    using namespace std;
    int a[100010];
    int main()
    {
    	int n, m;
    	cin >> n >> m;
    
    	map<int, int> mp;
    	for(int i=0;i<n;i++)
        {
            cin >> a[i];
            if(mp.count(a[i]) != 0)   //存在相同的数字个数要对应相加
                mp[a[i]]++;
            else
                mp[a[i]] = 1;
        }
    	sort(a, a+n);   //升序保证v1<=v2
    	for(int i=0;i<n;i++)
    	{
    		int t = m - a[i];
    		if( (t != a[i] && mp.count(t) != 0) ||
                (t == a[i] && mp[t] > 1) )  //两个数不相等的时候有就行了,否则该数要不止一个
    		{
    			cout << a[i] << " " << t;
    			return 0;
    		}
    	}
    	cout << "No Solution";
    	return 0;
    }
    
    引用

    https://pintia.cn/problem-sets/994805342720868352/problems/994805432256675840

  • 相关阅读:
    用Fusion Log诊断同一版本冲突问题解决
    SQLSERVER 切换数据库为单用户和多用户模式
    redis常用命令
    linq函数All,Any,Aggregate说明
    rabbitmq部署安装
    Centos7防火墙常用命令
    SQL SERVER添加表注释、字段注释
    Windows定时任务管理以及服务管理
    SQLServer 2008数据库查看死锁、堵塞的SQL语句
    SQLServer查询死锁
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/11903997.html
Copyright © 2011-2022 走看看