【题目链接】:http://codeforces.com/contest/799/problem/B

【题意】



告诉你每个人喜欢的衣服的颜色;

然后告诉你每件衣服的正面和背面的颜色以及它的价格;

只要某件衣服的正面或背面是某个人喜欢的颜色;

则那个人就会喜欢它;

然后每个人会挑自己最喜欢的且最便宜的衣服买;

给你每个人来的先后顺序;

让你求出每个人买的衣服的价格;

【题解】



定义3个set;

每次取出对应的set的头节点;

然后把那件衣服另外一面的颜色,在另外一个set中删去;

(或者,先不删去,记录某件衣服有没有被买去,然后每次取头结点,知道遇到一件没有被买去的衣服为止)



【Number Of WA】



0



【完整代码】

code 1

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 2e5+100; struct rec{
LL p,id;
friend bool operator < (rec a,rec b)
{
return a.p<b.p||(a.p==b.p && a.id<b.id);
}
}; set <rec> myset[4];
int n,p[N],a[N],b[N]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use
cin >> n;
rep1(i,1,n)
cin>>p[i];
rep1(i,1,n)
cin >>a[i];
rep1(i,1,n)
cin >>b[i];
rep1(i,1,n)
{
myset[a[i]].insert(rec{p[i],i});
if (a[i]!=b[i])
myset[b[i]].insert(rec{p[i],i});
}
cin >> n;
rep1(i,1,n)
{
int x;
cin >>x;
if (myset[x].empty())
cout<<-1<<endl;
else
{
__typeof(myset[x].begin()) c=myset[x].begin();
rec tou = (*c);
cout << tou.p;
myset[x].erase(c);
//cout <<x<<' '<<(x^a[tou.id]^b[tou.id])<<endl;
//cout <<tou.p<<endl;
if (a[tou.id]!=b[tou.id])
{
int t = (x^a[tou.id]^b[tou.id]);
c = myset[t].lower_bound(rec{p[tou.id],tou.id});
myset[t].erase(c);
}
}
if (i==n) cout << endl;
else
cout<<' ';
}
//init??????
return 0;
}

code 2

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 2e5+100; struct rec{
LL p,id;
friend bool operator < (rec a,rec b)
{
return a.p<b.p||(a.p==b.p && a.id<b.id);
}
}; set <rec> myset[4];
int n,p[N],a[N],b[N];
bool vis[N]; int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use
cin >> n;
rep1(i,1,n)
cin>>p[i];
rep1(i,1,n)
cin >>a[i];
rep1(i,1,n)
cin >>b[i];
rep1(i,1,n)
{
myset[a[i]].insert(rec{p[i],i});
myset[b[i]].insert(rec{p[i],i});
}
cin >> n;
rep1(i,1,n)
{
int x;
cin >>x;
bool fi = false;
while (!myset[x].empty())
{
auto y = myset[x].begin();
rec tou = *y;
myset[x].erase(y);
if (vis[tou.id]) continue;
vis[tou.id] = true;
fi = true;
cout << tou.p <<' ';
break;
}
if (!fi)
cout <<-1<<' ';
}
//init??????
return 0;
}

【codeforces 799B】T-shirt buying的更多相关文章

  1. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  2. 【codeforces 796A】Buying A House

    [题目链接]:http://codeforces.com/contest/796/problem/A [题意] 让你选一个最靠近女票的,且能买的房子; 输出你和你女票的距离; [题解] 枚举 [Num ...

  3. 【15.07%】【codeforces 625A】Guest From the Past

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  4. 【codeforces 762B】USB vs. PS/2

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  5. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  6. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  7. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  8. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  9. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

随机推荐

  1. hdoj 3488 Tour 【最小费用最大流】【KM算法】

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submi ...

  2. dlopen failed: empty/missing DT_HASH in &quot;libx.so&quot; (built with --hash-style=gnu?)

    崩溃日志内容: java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH in "libxxxx.so&quo ...

  3. const指针总结

    const 总结: 假设keywordconst出如今星号左边.表示被指物是常量:即不能通过指针改动变量的值. 假设keywordconst出如今星号右边,表示指针自身是常量:即不能改变指针的指向. ...

  4. How do you install Google Chrome on Ubuntu?

    https://askubuntu.com/questions/510056/how-to-install-google-chrome sudo apt-get install chromium-br ...

  5. HDU 1257(最小拦截系统)

    Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不 能超过前一发的高度.某天,雷达 ...

  6. number随时间随机递增每天 不同 php(原创)

    <?php namespace Controller; class IndexController{ public function getAutoRegUserName(){ $sql=&qu ...

  7. [Database] 列出MSSQL所有数据库名、所有表名、所有字段名

    1.获取所有数据库名 Select Name From Master..SysDatabases order By Name 2.获取所有表名 Select Name From SysObjects ...

  8. 【docker】python: can't open file 'helloworld.py': [Errno 13] Permission denied

    运行容器提示权限问题 docker run  -v $PWD/myapp:/usr/src/myapp  -w /usr/src/myapp python:3.5 python helloworld. ...

  9. C - Ilya and Sticks(贪心)

    Problem description In the evening, after the contest Ilya was bored, and he really felt like maximi ...

  10. 免费获取Bootstrap模板的方法

    Bootstrap是Twitter推出的一个开源的用于前端开发的工具包,其中中包含了丰富的Web组件,根据这些组件,可以快速的搭建一个漂亮.功能完备的网站. 最近通过了Bootstrap中文网学习了其 ...