CF441A Valera and Antique Items题面

题面描述

有 n 个人,第 i 个人有 k[i] 个数。第 i 个人的第 j 个数的大小为 a[i][j],你拥有一个数大小为 v ,如果你的数 v 严格大于某人的至少一个数。那么认为你可以和这个人达成协议。
求你能和几个人达成协议,分别是哪几个。(答案按编号上升的顺序输出)

分析

题目里的翻译有一定迷惑性,理解后会发现此题很简单:

因为数据不大,我们可以直接对于每一个人暴力判断是否有一个数比给出的 v 小即可。

直接正着做下去,然后一旦能和一个人达成协议就统计,这样的话我们就不需要考虑答案要按编号上升的顺序输出了(因为直接找到的人就是按编号上升的顺序找的)。

AC记录

完整代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+7;
ll read() 
{
    ll res=0,f=1;
    char c=getchar();
    while(!isdigit(c) && c!='-') c=getchar();
    if(c=='-') f=-1,c=getchar();
    while(isdigit(c)) res=(res<<1)+(res<<3)+c-48,c=getchar();
    return res*f;
}
int tot,ans[maxn];
int main()
{
    int n=read(),v=read();
    for(int i=1;i<=n;i++)
    {
        int k=read();          //我们可以直接边读入边做
        bool bl=0;            //bl表示当前人是否能达成协议
        for(int j=1;j<=k;j++)
        { 
            int x=read();
            if(x<v) bl=1;      //注意题目要求严格大于
        } 
        if(bl) ans[++tot]=i;
    }
    printf("%d\n",tot);
    for(int i=1;i<=tot;i++) printf("%d ",ans[i]);
    return 0;
}

有问题欢迎在评论区提出!

分类: 博客

Melon_Musk

猛男嘤嘤!

0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注