zoukankan      html  css  js  c++  java
  • Codeforces Round #359 (Div. 2)

    难得AB出的还算比较快,被C的0~n-1调了1h,一首凉凉送给自己。

    作者太菜,所以只有前三题的题解,抱歉。 

    A. Free Ice Cre

    Sol:

    直接按题意模拟即可

    #include<cstdio>
    #include<ctime>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<string>
    #define rg register
    #define il inline
    #define vd void
    #define ll long long
    #define For(i,x,y) for (rg int i=(x);i<=(y);i++)
    #define Dow(i,x,y) for (rg int i=(x);i>=(y);i--)
    #define cross(i,k) for (rg int i=first[k];i;i=last[i])
    using namespace std;
    il ll max(ll x,ll y){return x>y?x:y;}
    il ll min(ll x,ll y){return x<y?x:y;}
    il ll read(){
        ll x=0;int ch=getchar(),f=1;
        while (!isdigit(ch)&&(ch!='-')&&(ch!=EOF)) ch=getchar();
        if (ch=='-'){f=-1;ch=getchar();}
        while (isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
        return x*f;
    }
    int n,x,ans;
    ll m;
    char c[20];
    int main(){
        n=read(),m=read();
        For(i,1,n){
            scanf("%s",c),x=read();
            if (c[0]=='+') m+=1ll*x;
            else if (m<x) ans++;
            else m-=x;
        }
        printf("%lld %d",m,ans);
    }

    B.Little Robber Girl's Zoo

    Sol:

    n只有100,根据冒泡排序我们可以知道,最多交换n^2次,而题目里的上限是2w。

    所以直接模拟。

    #include<cstdio>
    #include<ctime>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<string>
    #define rg register
    #define il inline
    #define vd void
    #define ll long long
    #define N 101
    #define For(i,x,y) for (rg int i=(x);i<=(y);i++)
    #define Dow(i,x,y) for (rg int i=(x);i>=(y);i--)
    #define cross(i,k) for (rg int i=first[k];i;i=last[i])
    using namespace std;
    il ll max(ll x,ll y){return x>y?x:y;}
    il ll min(ll x,ll y){return x<y?x:y;}
    il ll read(){
        ll x=0;int ch=getchar(),f=1;
        while (!isdigit(ch)&&(ch!='-')&&(ch!=EOF)) ch=getchar();
        if (ch=='-'){f=-1;ch=getchar();}
        while (isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
        return x*f;
    }
    int n,x,a[N],b[N];
    int main(){
        n=read();
        For(i,1,n) a[i]=b[i]=read();
        sort(b+1,b+1+n);
        Dow(i,n,1){
            if (a[i]==b[i]) continue;
            Dow(j,i-1,1)
                if (a[j]==b[i]){
                    x=j;
                    break;
                }
            For(j,x,i-1){
                printf("%d %d
    ",j,j+1);
                swap(a[j],a[j+1]);
            }
        }
    }

    C.Robbers' watch

    Sol:

    因为不能有重复的数出现,而且一共就7个数字,所以n-1转成七进制的位数+m-1转成七进制的位数大于7就直接输出0,否则dfs。

    #include<cstdio>
    #include<ctime>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<string>
    #define rg register
    #define il inline
    #define vd void
    #define ll long long
    #define For(i,x,y) for (rg int i=(x);i<=(y);i++)
    #define Dow(i,x,y) for (rg int i=(x);i>=(y);i--)
    #define cross(i,k) for (rg int i=first[k];i;i=last[i])
    using namespace std;
    il ll max(ll x,ll y){return x>y?x:y;}
    il ll min(ll x,ll y){return x<y?x:y;}
    il ll read(){
        ll x=0;int ch=getchar(),f=1;
        while (!isdigit(ch)&&(ch!='-')&&(ch!=EOF)) ch=getchar();
        if (ch=='-'){f=-1;ch=getchar();}
        while (isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
        return x*f;
    }
    int n,m,ans,a[20],b[20];
    
    bool vis[10];
    il vd Dfs(int k,bool flag){
        if (k>b[0]){ans++;return;}
        int l=flag?b[b[0]-k+1]:6;
        For(i,0,l)
            if (!vis[i]){
                vis[i]=1;
                Dfs(k+1,flag&&i==b[b[0]-k+1]?1:0);
                vis[i]=0;
            }
    }
    il vd dfs(int k,bool flag){
        if (k>a[0]){Dfs(1,1);return;}
        int l=flag?a[a[0]-k+1]:6;
        For(i,0,l)
            if (!vis[i]){
                vis[i]=1;
                dfs(k+1,flag&&i==a[a[0]-k+1]?1:0);
                vis[i]=0;
            }
    }
    
    int main(){
        n=read()-1,m=read()-1;
        if (!n) a[0]=1; 
        while (n) a[++a[0]]=n%7,n/=7;
        if (!m) b[0]=1;
        while (m) b[++b[0]]=m%7,m/=7;
        if (a[0]+b[0]>7) printf("0");
        else dfs(1,1),printf("%d",ans);
    }
  • 相关阅读:
    聊天ListView
    Android笔试题三
    java内存分配与垃圾回收
    Activity切换的时候生命周期的变化
    二分查找
    如何用报表工具实现树状层级结构的填报表
    报表数据填报中的自动计算
    报表数据填报中的合法性校验
    tab 页形式展现多张报表
    报表工具之数据校验竟可以如此简单
  • 原文地址:https://www.cnblogs.com/zykykyk/p/8678643.html
Copyright © 2011-2022 走看看