题解 | #称砝码#set<int>t(s)是将s里面的数据放到新t中?

称砝码

http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

#include"bits/stdc++.h"
using namespace std;
/*
    题解:
        将所有的砝码,包括重复的砝码,当成是字符串,然后将set从0开始,设置一个新的set容器,
        将字符串里面的一次与这个新的set容器里面的数值相加,并添加到旧的set容器内;
        在下一次循环,将之前旧的容器设置成新的容器,在重复上面的步骤;
*/
int main()
{
    int n ;
    while(cin>>n)
    {
        vector<int> v;
        set<int> s;
        int a[n], b[n], temp;
        for(int i = 0 ; i < n ; i++)
            cin>>a[i];
        for(int i = 0 ; i < n ; i++)
        {
            cin>>temp;
            for(int j = 0 ; j < temp; j++)
                v.push_back(a[i]);       //此处很细节,就是将所有(包括重复的砝码重量)砝码重量当成是字符串;
        }
        s.insert(0);
        for(int i = 0 ; i < v.size(); i++)
        {
            set<int> t(s);    // 相当于重新设置一个set,并将之前的s插入到t中,对t遍历,
            /*
            如果直接遍历原来的s,假如s里面是0,1,2;你现在v[i]是1,那么应该对s插入1,2,3,
            当你插入3的时候s.size()增加1,变成0,1,2,3;这时候会继续遍历s最后一位3,
            s插入3+1=4,s变成0,1,2,3,4;s.size()再增加1,s继续插入4+1,之后无限循环不会停止
            */
            for(auto it = t.begin(); it != t.end(); it++)
                s.insert(*it + v[i]);
        }
        cout<<s.size()<<endl;
    }
    
    
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-16 18:05
何尝不是一种学历歧视呢
码农索隆:楼主明确拒绝,并说明拒绝原因了,这hr倒是挺忠心护主的
点赞 评论 收藏
分享
Java大菜狗:纯纯招黑奴,一天还不到两百那么多要求,还不迟到早退,以为啥啊,给一点工资做一堆活,还以不拖欠员工工资为荣,这是什么值得骄傲的事情吗,纯纯***公司
点赞 评论 收藏
分享
评论
5
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务