• 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

  • 相关阅读:
    APP之百度地图SDK的AK值获取(android)
    横向滚动菜单-选中标题居中显示
    函数按引用传参问题
    js验证提交
    Java servlet ajax
    数据库3种读
    mybatis插件
    mybatis 缓存
    从前端对象中获取的文本变为字符串,并替换其中一些指定的字符
    多个窗口开启后,切换到指定title的窗口
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/11903997.html
Copyright © 2020-2023  润新知