zoukankan      html  css  js  c++  java
  • CF 799B T-shirt buying

    一道超级水的练习STL的题目

    题目大意:有(n)件T恤,每件T恤都分别有价格(每件衣服的价格不重复)、前面的颜色、背部的颜色三种属性。接下来有(m)个人每个人都有一种喜欢的颜色,他们按先后顺序选择衣服,如果没有喜欢的颜色的衣服了就输出(-1),否则选择其中符合条件的衣服中价值最小的。输出每个人要付出的钱。

    注意到颜色只有三种,因此我们直接开三个set存储一下颜色懒得手写平衡树咯

    每一次都在set中取出最小值(按价格排序),并在另一个set里删去这个数

    时间复杂度(O(n log n)),这题是真的水

    不用堆的原因就因为我不会手写,貌似STL优先队列不支持删除

    CODE

    #include<cstdio>
    #include<cctype>
    #include<set>
    using namespace std;
    const int N=200005;
    set <int> s[3];
    int n,m,p[N],x;
    inline char tc(void)
    {
    	static char fl[100000],*A=fl,*B=fl;
    	return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
    }
    inline void read(int &x)
    {
    	x=0; char ch; while (!isdigit(ch=tc()));
    	while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
    }
    int main()
    {
    	//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
    	register int i; read(n);
    	for (i=1;i<=n;++i) read(p[i]);
    	for (i=1;i<=n;++i) read(x),s[x-1].insert(p[i]);
    	for (i=1;i<=n;++i) read(x),s[x-1].insert(p[i]);
    	for (read(m),i=1;i<=m;++i)
    	{
    		read(x); if (!s[x-1].size()) { printf("-1 "); continue; }
    		int now=*s[x-1].begin(); printf("%d ",now); s[0].erase(now); s[1].erase(now); s[2].erase(now);
    	}
    	return 0;
    }
    
  • 相关阅读:
    类别的三个作用
    require()
    commonJS
    ng-app&data-ng-app
    《css网站布局实录》(李超)——读书札记
    高性能JS(读书札记)
    两个同级div重叠的情况
    前端性能优化
    正则表达式
    ajax
  • 原文地址:https://www.cnblogs.com/cjjsb/p/9439854.html
Copyright © 2011-2022 走看看