【题目链接】: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. oracle强化练习题

    编写简单的查询语句 1.显示部门表的所有信息 Select * from dept; 2.显示部门号码,部门名称 Selectdeptno,dname from dept; 3.显示下面字段及字符串的 ...

  2. js动态创建表格------Day59

    刚刚不知道怎么回事,CSDN博客一直打不开,就在博客园完毕了今天的记录,结果临关机,登录了下.发现又好了,就再多花个几分钟转下吧,也无论到底在意的是什么了,权当强迫症了... 前几天记录了动态的加入一 ...

  3. ZOJ 1654--Place the Robots【二分匹配 &amp;&amp; 经典建图】

    Place the Robots Time Limit: 5 Seconds      Memory Limit: 32768 KB Robert is a famous engineer. One ...

  4. CSU 1506 Problem D: Double Shortest Paths(最小费用最大流)

    题意:2个人从1走到n,假设一条路第一次走则是价值di,假设第二次还走这条路则须要价值di+ai,要你输出2个人到达终点的最小价值! 太水了!一条边建2次就OK了.第一次价值为di,第二次为ai+di ...

  5. Powershell 渗透测试工具-Nishang

    Powershell 渗透测试工具-Nishang 分享到: 作者:V1ct0r 稿费:500RMB(不服你也来投稿啊!) 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 传送门 ...

  6. TexturePacker贴图打包工具

    1.该软件是收费的,不过对于这么一款实用的工具来说,物有所值,下载地址 http://www.codeandweb.com/texturepacker 2.openGL载入纹理图片的时候,所用内存是会 ...

  7. c语言return与exit的区别

    2013-09-0918:54:33 exit函数在头文件stdlib.h中,函数原型: void exit(int status); exit(0) 正常运行程序并退出程序. exit(1) 非正常 ...

  8. 从实现HTML页面局部刷新到JSONP

    也可以用iframe方法发get请求,但是目前iframe基本已经被弃用,所以此处就不介绍这个方法. 方案一:用图片造 get 请求 button.addEventListener('click', ...

  9. 第五课: - Stack / Unstack / Transpose函数

    第 5 课   我们将简要介绍 stack 和 unstack 以及 T (Transpose)函数. 在用pandas进行数据重排时,经常用到stack和unstack两个函数.stack的意思是堆 ...

  10. 自定义typecho后台路径

    如何自定义后台路径 Typecho 安装好后,默认的后台路径是 domain.com/admin/,为了提高安全性,我们允许以 domain.com/xxxx/ 的方式访问,其中 xxxx 是你自定义 ...