Codeforces Round #442 (Div. 2)

本年学会了坚持,持之以恒打卡,完结一件事,从中感受到了童趣。

第③遍打cf,感觉很有趣。

年终到庭治懒写作营,坚定不移三个月天天写五百字以上,居然能一天不拉的写完,真是没悟出。其实自身总感到本身有失眠,强迫着友好做,心里觉得不到位,就会有不好的事体爆发,漏到一样都感觉到心里不踏实。就如笔者每到夜班前就要坚忍不拔达成那几件业务,做不到都感觉夜班会倒霉过,每回都跟运气联系在一道,不得不去完结。

llj大佬A了三题的时候还从未见到a题在讲怎么,谷歌翻译把
a 翻译成了1,开心被坑。

当年作者锲而不舍做到一遍延续写文三十天;在微信某团伙坚韧不拔每一天打卡签到,后来到qq空间持之以恒打卡签到;百折不回天天给爱人小说投票;百折不挠每一天看文;坚韧不拔每日到娱乐里签到……

写了的都以些不难的签到题,写得太慢还掉了rating,,,,,

地点都以简容易单的事体,未来还要持之以恒复杂的政工。上面作者还想坚持创作,坚定不移早睡早起,百折不挠很多居多业务。

 

实则只要把性冷淡用到合理的地方,那正是引力,懒惰也是足以治的。有焦虑症说好倒霉,说坏不坏,得看怎么地点,有时候在某地点不想要强迫症,但是偏偏有,真是郁闷,就像自己看小说总是有很强的精神分裂症,非得一字不漏地看,漏个标点都要回到去看,几乎要抓狂,世界上这么多文等着自家去看,可是笔者那蜗牛阅读速度,不精晓能看几本,一年也看不住几本,一辈子也没多少年,这么多文都看不住,真是心碎,非得还有收集文的爱好,瞧着满满的一硬盘文,还有满橱柜的书,真是心塞。后边作者得陶冶飞速阅读,克制那样的抑郁性神经症。

a.模拟

坚定不移做每件工作,要把性心理障碍变成引力,什么都能制伏。

站贰个点往两边小的十二分跑。

图片 1图片 2

//Twenty
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
using namespace std;
typedef long long LL;
int n,a,b,c,now,ans,l[10],r[10],ll[10],rr[10];
int main()
{
    cin>>n>>a>>b>>c;
    l[1]=2; r[1]=3; ll[1]=a; rr[1]=b;
    l[2]=3; r[2]=1; ll[2]=c; rr[2]=a;
    l[3]=1; r[3]=2; ll[3]=b; rr[3]=c;
    int now=1,cnt=0;
    while(cnt<=n) {
        cnt++;
        if(cnt>=n) break;
        if(ll[now]<=rr[now]) {ans+=ll[now]; now=l[now]; }
        else {ans+=rr[now]; now=r[now]; }
    }
    cout<<ans<<endl;
    return 0;
}

View
Code

 

b.发现mod
b答案相同的点是联合的。当一坨长度够了就break。

图片 3图片 4

//Twenty
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
using namespace std;
typedef long long LL;
const int maxn=1e5+5;

inline int read() {
    int ret=0,f=1; char ch=getchar();
    while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    if(ch=='-') f=-1,ch=getchar();
    for(;ch>='0'&&ch<='9';ch=getchar()) ret=ret*10+ch-'0';
    return ret*f;
}

int n,k,m,a[maxn],pos[maxn],cnt[maxn],pr[maxn],fl,now;

int main()
{
    n=read(); k=read(); m=read();
    for(int i=1;i<=n;i++) a[i]=read();
    for(int i=1;i<=n;i++) {
        now=a[i]%m;
        if(pos[now]) pr[i]=pos[now];
        cnt[now]++;
        pos[now]=i;
        if(cnt[now]==k) {now=i; fl=1; break;}
    }
    if(!fl) printf("No\n");
    else {
        printf("Yes\n");
        printf("%d ",a[now]);
        while(pr[now]) {
            printf("%d ",a[pr[now]]);
            now=pr[now];
        }
        printf("\n");
    }
    return 0;
}

View
Code

 

c.发现最大而是能加9*9=81,枚举从max(0,n-81)
~n,判断可行即可。

留意要升序输出,WA了两发。。。。

图片 5图片 6

//Twenty
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
using namespace std;
typedef long long LL;
int n,ans[100];
int main()
{
    scanf("%d",&n);
    for(int i=max(1,n-81);i<=n;i++) {
        int tp=i,tpp=i;
        while(tp) {
            tpp+=tp%10;
            tp/=10;
        }
        if(tpp==n) ans[++ans[0]]=i;
    }
    printf("%d\n",ans[0]);
    for(int i=1;i<=ans[0];i++) 
        printf("%d ",ans[i]);
    printf("\n");
    return 0;
}

View
Code

 

d.转换模型成求逆序对最多的人的逆序对的个数。

自然是最末尾一位。随便怎么模拟乱搞一下就能够了。

图片 7图片 8

//Twenty
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
using namespace std;
typedef long long LL;
const int maxn=300005;
int n,a[maxn],x,ans,now,as[maxn];
int main()
{
    scanf("%d",&n);
    as[0]=1;
    for(int i=1;i<=n;i++) {
        scanf("%d",&x);
        a[x]=1;
        if(x!=n&&a[x+1]!=1) ans++;
        else {
            if(x==n) {
                now=n; a[now]=1;
                while(a[now-1]==1) {now--; ans--; }
            }
            else {
                a[x]=1;
                if(now!=x+1) ans++;
                else {
                    now=x;
                    while(now>=2&&a[now-1]==1) {
                        now--;
                        ans--;
                    }
                } 
            }
        }
        as[i]=ans+1;
    }
    for(int i=0;i<=n;i++) printf("%d ",as[i]);
    printf("\n");
    return 0;
}

View
Code

 

e.听说是2_sat;

不会。

 

f.

llj大佬给我讲得好像很有道理的指南,结果WA了。

图片 9图片 10

//Twenty
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
const int maxn=200005;
using namespace std;
typedef long long LL;
LL ans;
int n,a[maxn],l[maxn],r[maxn],q[maxn],h[maxn],ll[50],rr[50],que[maxn],ql=1,qr;

void read(int &x) {
    int ret=0,f=1; char ch=getchar();
    while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    if(ch=='-') f=-1,ch=getchar();
    for(;ch>='0'&&ch<='9';ch=getchar()) ret=ret*10+ch-'0';
    x=ret*f;
}

int main()
{
    read(n);
    for(int i=1;i<=n;i++) read(a[i]);
    for(int i=1;i<=n;i++) {
        while(ql<=qr&&a[i]>=a[que[qr]]) {qr--;}
        if(ql<=qr) l[i]=que[qr]+1;
        else l[i]=1;
        que[++qr]=i;
        for(int j=1;j<=30;j++) {
            if(a[i]&(1<<j-1)) ll[j]=i;
            else if(ll[j]&&(!q[i]||q[i]<ll[j])) q[i]=ll[j];
        } 
    }
    ql=1; qr=0;
    for(int i=n;i>=1;i--) {
        while(ql<=qr&&a[i]>=a[que[qr]]) {qr--;}
        if(ql<=qr) r[i]=que[qr]-1;
        else r[i]=n;
        que[++qr]=i;
        for(int j=1;j<=30;j++) {
            if(a[i]&(1<<j-1)) rr[j]=i;
            else if(rr[j]&&(!h[i]||h[i]>rr[j])) h[i]=rr[j];
        } 
    }
    for(int i=1;i<=n;i++) {
        if(q[i]&&h[i])
            ans+=((LL)(i-l[i]+1)*(r[i]-i+1)-(LL)(i-q[i])*(h[i]-i));
    }
    printf("%I64d\n",ans);
    return 0;
}

View
Code