【set】bzoj3715 [PA2014]Lustra

对每种属性开一个set,只要某个厂家符合该属性的最值,就加进set,最后判断是否有某个厂家在4个set里都存在即可。

 1 #include<cstdio>
 2 #include<set>
 3 using namespace std;
 4 int T,a[4][100001],EX[4],n;
 5 set<int>S[4];
 6 typedef set<int>::iterator ITER;
 7 bool check(const int &x)
 8 {
 9     for(int i=1;i<4;i++)
10       if(S[i].find(x)==S[i].end())
11         return 0;
12     return 1;
13 }
14 int main()
15 {
16     scanf("%d",&T);
17     for(;T>0;T--)
18       {
19           EX[0]=EX[2]=2147483647;
20           EX[1]=EX[3]=-2147483647;
21           scanf("%d",&n);
22           for(int i=1;i<=n;i++)
23             for(int j=0;j<4;j++)
24               scanf("%d",&a[j][i]);
25           for(int i=1;i<=n;i++) EX[0]=min(EX[0],a[0][i]);
26           for(int i=1;i<=n;i++) EX[2]=min(EX[2],a[2][i]);
27           for(int i=1;i<=n;i++) EX[1]=max(EX[1],a[1][i]);
28           for(int i=1;i<=n;i++) EX[3]=max(EX[3],a[3][i]);
29           for(int i=0;i<4;i++)
30             for(int j=1;j<=n;j++)
31               if(a[i][j]==EX[i]) S[i].insert(j);
32           for(ITER it=S[0].begin();it!=S[0].end();it++)
33             if(check(*it))
34               {
35                 puts("TAK");
36                 goto OUT;
37               }
38           puts("NIE");
39           OUT:for(int i=0;i<4;i++) S[i].clear();
40       }
41     return 0;
42 }
时间: 2024-08-03 15:26:29

【set】bzoj3715 [PA2014]Lustra的相关文章

BZOJ3715: [PA2014]Lustra

3715: [PA2014]Lustra Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 237  Solved: 149[Submit][Status] Description Byteasar公司专门外包生产带有镜子的衣柜.刚刚举行的招标会上,有n个工厂参加竞标.所有镜子都是长方形的,每个工厂能够制造的镜子都有其各自的最大.最小宽度和最大.最小高度.镜子不可以旋转.如果存在某家工厂满足这样的条件:其他所有工厂能够制造的镜子,它都能够制造.那么这

【BZOJ】3709: [PA2014]Bohater(贪心)

http://www.lydsy.com/JudgeOnline/problem.php?id=3709 很水的题...但是由于脑洞小..漏想了一种情况.. 首先显然能补血的先杀.. 然后杀完后从补血越多的杀..(这点我之前考虑错了QAQ) 正确性显然........ #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream>

【BZOJ】3712: [PA2014]Fiolki

http://www.lydsy.com/JudgeOnline/problem.php?id=3712 题意:n个瓶子,第i个瓶子里又g[i]克物质.m次操作,第i次操作把第a[i]个瓶子的东西全部倒到第b[i]个瓶子里(保证之后不出现a[i]).k种反应,其中c[i]和d[i]反应,而且如果一个瓶子里有多种反应则优先反应靠前的.每次反应对答案贡献为min(g[i], g[i])*2(m<n<=200000, k<=500000) #include <bits/stdc++.h&

【贪心】bzoj3709 [PA2014]Bohater

把怪分成两类看: 一.回血>损血 则若先杀损血少的再杀损血多的,则为当前这一步提供了更高的可能性.因为血量是单增的,所以尽量用较少的血量去干♂耗血较少的怪物. 二.回血<损血 则若先杀回血多的再杀回血少的,则为下一步提供了更高的可能性.当前这一步的可能性也没有减少,因为即使回血多的损血很多,但是由于此时血量已经是单减的了,所以若此时无法杀掉损血多的,将来也不能. ORZ TimeMachine And ZKY 1 #include<cstdio> 2 #include<ios

【暴力】bzoj3713 [PA2014]Iloczyn

没什么好说的. 1 #include<cstdio> 2 using namespace std; 3 typedef long long ll; 4 int n,m;ll x,Fib[101]; 5 int main() 6 { 7 scanf("%d",&n); Fib[1]=1; 8 for(int i=2;;i++) 9 { 10 Fib[i]=Fib[i-2]+Fib[i-1]; 11 if(Fib[i]>1000000000) {m=i; brea

【贪心】bzoj3721 PA2014 Final Bazarek

考虑不限制奇偶的情况,那就是直接排序取前k个的和. 加上奇偶限制:若排序后的前k个的和是偶数,则“显然地”:将其中的最小的奇数替换成未被选择的数中最大的偶数 或者 将其中的最小的偶数替换成未被选择的数中最大的奇数 是最优的. 那么排序之后 就可以预处理出 某个位置左侧最小的奇数.左侧最小的偶数.右侧最大的奇数.右侧最大的偶数,然后就可以O(1)地回答每个询问了. 开long long 1 #include<cstdio> 2 #include<algorithm> 3 using

【BZOJ3721】PA2014 Final Bazarek 贪心

[BZOJ3721]PA2014 Final Bazarek Description 有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n<=1000000),表示商品数量.接下来一行有n个整数,表示每件商品的价格,范围在[1,10^9].接下来一行有一个整数m(1<=m<=1000000),表示询问数量.接下来m行,每行一个整数k[i](1<=k[i]<=n). Output 对于每个询问,输出一行表示保证奇数的

【BZOJ 3727】 3727: PA2014 Final Zadanie (递推)

3727: PA2014 Final Zadanie Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 279  Solved: 121 Description 吉丽YY了一道神题,题面是这样的:"一棵n个点的树,每条边长度为1,第i个结点居住着a[i]个人.假设在i结点举行会议,所有人都从原住址沿着最短路径来到i结点,行走的总路程为b[i].输出所有b[i]."吉丽已经造好了数据,但熊孩子把输入文件中所有a[i]给删掉了.你能帮他恢复吗?

【BZOJ3714】[PA2014]Kuglarz 最小生成树

[BZOJ3714][PA2014]Kuglarz Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,…,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品.花费c_ij元,魔术师就会告诉你杯子i,i+1,…,j底下藏有球的总数的奇偶性.采取最优的询问策略,你至少需要花费多少元,才能保证猜出哪些杯子底下藏着球? Input 第一行一个整数n(1<=n<=2000).第i+1行(1<=i<=n)有n+1-i个整数,表示每一种询问所需的