【题目链接】: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. 《Android源代码设计模式解析与实战》读书笔记(八)

    第八章.状态模式 1.定义 状态模式中的行为是由状态来决定,不同的状态下有不同的行为.当一个对象的内在状态改变时同意改变其行为,这个对象看起来像是改变了其类. 2.使用场景 1.一个对象的行为取决于它 ...

  2. XTU OJ 1207 Welcome to XTCPC (字符串签到题)

    Problem Description Welcome to XTCPC! XTCPC start today, you are going to choose a slogan to celebra ...

  3. spring 源码解析

    1. [文件] spring源码.txt ~ 15B     下载(167) ? 1 springн┤┬вио╬Ш: 2. [文件] spring源码分析之AOP.txt ~ 15KB     下载( ...

  4. Error解决:Property&#39;s synthesized getter follows Cocoa naming convention for returning &#39;owned&#39;

    在项目中定义了以new开头的textField.结果报错: 先看我的源代码: #import <UIKit/UIKit.h> @interface ResetPasswordViewCon ...

  5. Ubuntu Tomcat Service

    只需要将%TOMCAT_HOME%/bin/catalina.sh文件拷贝到/etc/init.d/文件夹下,稍作编辑,然后注册成系统服务,是否设置自启动均可. 1. 编辑catalina.sh文件c ...

  6. ettercap + driftnet 实现同网段下流量欺骗

    前言: 由于在局域网中,网关会不断地发送 ARP 数据包询问当前是否有新的客户端上线,如果我们可以欺骗当前局域网网段下的主机, 把我们当成网关地址,并且我们把欺骗的流量转发到真正的网关地址,这样我们就 ...

  7. 基于scrapy-redis组件的分布式爬虫

    scrapy-redis组件安装 分布式实现流程 scrapy-redis组件安装 - 下载scrapy-redis组件:pip install scrapy-redis - 更改redis配置文件: ...

  8. Html Ajax上传文件,form表单下载文件

    Html中的代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&quo ...

  9. gitlab quickly install

    一.安装gitlab依赖环境 yum -y install vim wget epel-release  yum install curl policycoreutils openssh-server ...

  10. C#监测方法执行效率

    System.Diagnostics.Stopwatch watch = new Stopwatch(); watch.Start(); // 开始监视代码运行时间 //需要监测的代码 dothing ...