码迷,mamicode.com
首页 > 其他好文 > 详细

考后反思

时间:2019-08-03 12:42:05      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:swa   int   include   tis   ace   但我   freopen   txt   col   

一般

考试先看的第二题,打了分块,然后调了很长时间,(我分块竟然调了一个小时,if位置错了,对拍一直错,漏洞百出的程序,背不过的模板)

我的if写错位置竟然还有30分?????

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 600000
ll n,m,t;
multiset<ll>st[700];
ll col[A],belong[A];
inline void swp(ll l){
    swap(col[l],col[l+1]);
    if(belong[l]==belong[l+1])
        return;
    st[belong[l]].clear();
    st[belong[l+1]].clear();
//    printf("bl-1=%lld l=/%lld\n",(belong[l]-1)*t+1,belong[l]*t);
    for(ll i=(belong[l]-1)*t+1;i<=min(belong[l]*t,n);i++){
//        printf("o=%lld col=%lld\n",i,col[i]);
        st[belong[l]].insert(col[i]);
    }
    for(ll i=belong[l]*t+1;i<=min(belong[l+1]*t,n);i++){
//        printf("oo=%lld col=%lld\n",i,col[i]);
        st[belong[l+1]].insert(col[i]);
    }
}
inline ll sum(ll l,ll r,ll c){
    ll ans=0;
//    printf("t=%lld l=%lld r=%lld belong=%lld %lld *t=%lld %lld\n",t,l,r,belong[l],belong[r],belong[l]*t,belong[r]*t);
//    printf("l=%lld b=%lld r=%lld b=%lld\n",l,belong[l]*t,(belong[r])*t+1,r);
    for(ll i=l;i<=min(belong[l]*t,r);i++){
//        printf("u=%lld\n",i);
        if(col[i]==c) {
            ans++;
//            printf("111 i=%lld ans=%lld\n",i,ans);
        }
    }
    if(belong[l]!=belong[r])
        for(ll i=belong[l]+1;i<=belong[r]-1;i++){
//            printf("belong=%lld\n",i);
            ans+=st[i].count(c);
//            printf("ans=%lld\n",ans);
        }
    for(ll i=(belong[r]-1)*t+1;i<=r;i++){
//        printf("i=%lld\n",i);
        if(col[i]==c) 
        {
            ans++;
//            printf("333 i=%lld ans=%lld\n",i,ans);
        }
    }
    return ans;
}
int main(){
//    freopen("mkd.txt","r",stdin);
//    freopen("wa.txt","w",stdout);
    scanf("%lld%lld",&n,&m);
    t=sqrt(n);
    for(ll i=1;i<=n;i++){
        scanf("%lld",&col[i]),belong[i]=(i-1)/t+1;
        st[belong[i]].insert(col[i]);
    }
    for(ll i=1,op,l,r,c;i<=m;i++){
        scanf("%lld",&op);
        if(op==1){
            scanf("%lld%lld%lld",&l,&r,&c);
            printf("%lld\n",sum(l,r,c));
        }
        else{
            scanf("%lld",&c);
            swp(c);
        }
    }
}

然后开始看第一题,不会,但我看到给出的特殊性质我尝试推了一下,发现两个性质可以让我水掉80分第一题打了很多特判,判傻了少判10分最后只拿了70分

两个性质也是比较简单的

1.当相差为1时一定为1,相差为0时输出原值

2.当全是当前这一代最大值时,当奇偶性相同时为较小值,否则为1

然后正解也比较简单但我依然没有想出来

然后开始看第三题,但第三题我连题干都没

考后反思

标签:swa   int   include   tis   ace   但我   freopen   txt   col   

原文地址:https://www.cnblogs.com/znsbc-13/p/11294391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!