zoukankan      html  css  js  c++  java
  • Codeforces LATOKEN Round 1 (Div. 1 + Div. 2)题解

    比赛链接

    A - Colour the Flag
    有一个n*m矩阵
    要将空白格子涂成红或者白
    使得相邻两个格子颜色不一样
    只要有一个涂上颜色则可确定最终的涂色结果
    绝了 这题怎么代码量更大

    int n,m;
    char s[55],c[2];
    bool ju;
    void solve()
    {
        sdd(n,m);
        c[0]='A'; 
        ju=0;
        rep(i,1,n)
        {
            sc(s+1);
            if(ju)continue;
            rep(j,1,m)
            {
                if(s[j]=='.')continue;
                int pos=(i+j)&1;
                if(c[0]=='A')//前面没有已涂色的 
                {
                    c[1]='R';c[0]='W';
                    if(pos&&s[j]=='W'||!pos&&s[j]=='R')
                    c[1]='W',c[0]='R';
                }
                else
                {
                    if(c[pos]!=s[j])ju=1;
                }
            }
        }
        if(ju)puts("NO");
        else
        {
            puts("YES");
            if(c[0]=='A')c[0]='R',c[1]='W';
            rep(i,1,n)
            {
                rep(j,1,m)
                {
                    int pos=(i+j)&1;
                    printf("%c",c[pos]);
                }
                puts("");
            }
        } 
    }

    B. Histogram Ugliness

    我可以,陪你去看星星~
    将一个直方图的某一列削掉几个
    结果为直方图左右边边的数目+操作次数
    如果左右的数都比当前数小,就可以将这个值减去h[i]-max(h[i-1],h[i+1])
    为什么错了呢
    没毛病呀
    还好没打。。不然要被气死了哈
    !!!!h[n+1]的值没赋0
    我是傻子qwq

    int n,h[maxn];
    ll ans;
    void solve()
    {
        sd(n);ans=0;
        rep(i,1,n)sd(h[i]),ans+=abs(h[i]-h[i-1]);
        ans+=h[n];
        h[n+1]=0;
        rep(i,1,n)
        {
            if(h[i]>h[i-1]&&h[i]>h[i+1])ans-=h[i]-max(h[i-1],h[i+1]);
        }
        plld(ans);
    }

    C. Little Alawn's Puzzle

    一个2*n的矩阵
    每一行都是n的全排列
    要同一行同一列的数都不一样
    通过交换同一列的两个数实现
    问能够得到多少种满足条件的矩阵
    那就是这些数构成一个一个的环
    答案就是kpow(2,cnt):cnt是环的个数
    如果存在环的大小为1的话答案就是0

    int n,a[maxn],b[maxn],pos[maxn],cnt;
    bool vis[maxn];
    int kpow(int a,int b)
    {
        int ans=1;
        while(b)
        {
            if(b&1)ans=1ll*ans*a%mod;
            a=1ll*a*a%mod;
            b>>=1;
        }
        return ans;
    }
    void solve()
    {
        sd(n);cnt=0;
        rep(i,1,n)sd(a[i]),vis[i]=0,pos[a[i]]=i;
        rep(i,1,n)sd(b[i]);
        rep(i,1,n)
        {
            if(vis[i])continue;
            if(a[i]==b[i])
            {
                puts("0");
                return;
            }
            cnt++;
            int las=b[i];
            while(las!=a[i])
            {
                vis[pos[las]]=1;
                las=b[pos[las]];
            }
        }
        pd(kpow(2,cnt));
    }

    D. Lost Tree

    有n个点的树,让你猜哪些是边
    选择一个点r,可以得到其它点到r的最短距离
    可以询问n/2次!!!向上取整!!!
    ~~那就是间隔一层询问一次~~
    看以1为根结点时,奇数层的个数与偶数层个数的大小

    int n,r,x,a[maxn];
    int cnt1,cnt2;
    bool is[maxn][maxn];
    void solve()
    {
        sd(n);
        printf("? 1
    ");fflush(stdout);
        cnt2=-1;
        rep(i,1,n)
        {
            sd(a[i]);
            if(a[i]&1)cnt1++;
            else cnt2++;
            if(a[i]==1)is[1][i]=is[i][1]=1;
        }
        int ju=(cnt1>=cnt2);
        rep(i,2,n)
        {
            if((a[i]&1)==ju)continue;
            printf("? %d
    ",i);fflush(stdout);
            rep(j,1,n)
            {
                sd(x);
                if(x==1)is[i][j]=is[j][i]=1;
            }
        }
        puts("!");
        rep(i,1,n)rep(j,i+1,n)if(is[i][j])pdd(i,j);
    }
    欢迎加我qq1165750856一起玩呀~
  • 相关阅读:
    java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
    STS工具各版本下载网址
    SpringBoot访问不了JSP但却能进入后台
    springboot o.a.tomcat.util.scan.StandardJarScanner : Failed to scan [file:/D:/apache-maven-3.0.5[系统找不到指定路径]
    STS工具:mybayis连接oracle数据库
    springBoot怎样访问静态资源?+静态资源简介
    springboot注解
    8.12-14 df 、mkswap、swapon、swapoff、sync
    8.5-7 mkfs、dumpe2fs、resize2fs
    8.2-3 partprobe、tune2fs
  • 原文地址:https://www.cnblogs.com/HHHEN/p/14882372.html
Copyright © 2011-2022 走看看