我的隔天Codeforces——Round #371 (Div. 2)

来源:互联网 发布:液晶显示器测试软件 编辑:程序博客网 时间:2024/05/10 11:13

明天网络赛青岛赛区,后天沈阳赛区。今天趁着有空把codeforces371撸掉,明后天以万全的状态去再试试比较正式一点的比赛。

A. Meeting of Old Friends

分析:签到题把,虽然我WA了两次。就是求两条线段的交集长度,中间的特判一下。唉,一开始没有想清楚,WA了两发,气死了。

int main(){    //freopen("d:\\acm\\in.in","r",stdin);    ll l1,r1,l2,r2,k;    scanf("%lld %lld %lld %lld %lld",&l1,&r1,&l2,&r2,&k);    if(l1>l2){        swap(l1,l2);        swap(r1,r2);    }    if(r1<l2)puts("0");    else {        ll ans=min(r1,r2)-l2+1;        if(l2<=k&&k<=min(r1,r2))ans--;        cout<<ans<<endl;    }    return 0;}


B. Filya and Homework

分析:同签到题,这次WA了三发。很快看出来就是查有多少不同的数,三个以下yes,三个以上No,三个的时候要特判。因为选择加减的数必须是相同的,那么三个数必须满足等差数列才是yes。唉,一开始没有看清题目,结果以为三个就是yes,WA了三发,真TM亏。

int main(){    //freopen("d:\\acm\\in.in","r",stdin);    int ln;    ll dat[10];    scanf("%d",&ln);    int cnt=0;    while(ln--){        ll a;        scanf("%lld",&a);        if(cnt==0)dat[cnt++]=a;        else if(cnt>0){            bool flag=false;            for(int i=0;i<cnt;i++)                if(a==dat[i]){                    flag=true;                    break;                }            if(!flag)dat[cnt++]=a;            if(cnt>3)cnt=-1;        }    }    if(cnt==3){        sort(dat,dat+3);        if(dat[0]+dat[2]==2*dat[1])puts("YES");        else puts("NO");    }    else if(cnt>0)puts("YES");    else puts("NO");    return 0;}


C. Sonya and Queries

分析:这题稍微有点意思,多说两句。

题意:+ a 代表在一个集合里+一个数, - a代表集合里减掉这个a, ? 010001代表集合里每个数字a从右往左跟那个01组成的串匹配,是1代表偶数,0代表奇数,如果其中一个短了,用0补齐,输出现在集合多少个匹配

做法:一开始以为是01字典树,想写但总觉得哪里不对劲,然后又想了想,发现这道题就是一道简单思维题。这道题具体的数字是没有意义的,真正有意义的是数字的每个位置的奇偶。而且因为匹配的时候是从右往左匹配的,前面没有的部分可以补零,那么从左边开始数到第一个奇数位之前,都是没有意义的。这样的话,不如考虑将10进制转换成2进制,每个10进制位是奇数就转化为1,是偶数就转化为0,得到一个2进制数,当然只有存储时是2进制,我们看到的是另一个10进制数。数字最大到1018,转化后的数不会超过1000000,那么只要直接,开数组加减个数,输入即可!

int dat[maxn];char str[20];int cal(){    int len=strlen(str);    int ans=0;    for(int i=0;i<len;i++)        if((str[i]-'0')&1)ans=(ans*2+1);        else ans=(ans*2);    return ans;}int main(){    //freopen("d:\\acm\\in.in","r",stdin);    int n;    scanf("%d",&n);    char op[5];    int a;    while(n--){        scanf("%s %s",op,str);        a=cal();        //cout<<a<<endl;        if(op[0]=='+')dat[a]++;        else if(op[0]=='-')dat[a]--;        else printf("%d\n",dat[a]);    }    return 0;}


D. Searching Rectangles

分析:看到这道题,我是懵逼的,完全没有懂是什么意思。后来听我的同学说了下,才有点明白。首先这是一道交互题,其实区域赛不会搞交互题,最后这种题基本只有老毛子会出,结论那我搞个屁啊!。



E. Sonya and Problem Wihtout a Legend

分析:看到这道题一点思路没有,然后就基本断定是DP题了,DP小白暂时就不看DP了把,真心连题解都看不懂。

给个dalao的博客:http://blog.csdn.net/miracle_ma/article/details/52537208

虽然这篇题解写得有点水哈,但是写粗来总是好的。

0 0
原创粉丝点击