zoukankan      html  css  js  c++  java
  • CSP 202012

    CSP202012-1

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main(){
        int n,ans=0,w,s;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d%d",&w,&s);
            ans+=w*s;
        }
        ans=max(ans,0);
        printf("%d
    ",ans);
        return 0;
    }

    CSP202012-2

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define maxn 100010
    using namespace std;
    int n,sum1[maxn],sum0[maxn];//sum1是后缀1的个数,sum0是前缀0的个数
    struct node{
        int x,y;
    }a[maxn];
    bool cmp(node u,node v){
        return u.x<v.x;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);
        sort(a+1,a+n+1,cmp);
        for(int i=1;i<=n;i++){
            if(a[i].y==0)sum0[i]=sum0[i-1]+1;
            else sum0[i]=sum0[i-1];
        }
        for(int i=n;i>=1;i--){
            if(a[i].y==1)sum1[i]=sum1[i+1]+1;
            else sum1[i]=sum1[i+1];
        }
        int mx=0,ansnow,ans=a[1].x;
        for(int i=1;i<=n;i++){
            if(a[i].x==a[i-1].x && i!=1)continue;
            ansnow=sum1[i]+sum0[i-1];
            if(ansnow>=mx){
                mx=ansnow;
                ans=a[i].x;
            }
        }
        printf("%d
    ",ans);
        system("pause");
        return 0;
    }

    CSP202012-3

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <map>
    #include <vector>
    #define maxn 4000010
    #define INF (LLONG_MAX/3)
    using namespace std;
    struct node{
        map<string,int>son;
        int kind;//1文件,2目录
        long long ld,lr;//ld孩子大小上限,lr后代大小上限
        long long sld,slr;//sld孩子文件大小,slr后代文件大小
        long long fsize;//如果为文件,那么自身有一个大小
        int fa;//父亲节点
    }g[maxn];
    int clockIndex;
    
    vector<pair<int,string> >reback;//存储创建过的路径
    
    void REBACK(){
        for(int i=0;i<reback.size();i++){
            int a=reback[i].first;
            string b=reback[i].second;
            g[a].son.erase(g[a].son.find(b));
        }
    }
    
    string solveC(){//创建普通文件
        string path;cin>>path;
        long long fsize;scanf("%lld",&fsize);
        int p=1,id=0,Lpath=path.length(),last=-1;
        for(int i=Lpath-1;i>=0;i--){
            if(path[i]=='/'){
                last=i;
                break;
            }
        }
        int tclock=clockIndex;
        reback.clear();
    
        //寻找路径
        while(p<last){
            string t="";//t存储目录名
            while(p<last && path[p]!='/'){
                t=t+path[p];p++;
            }
            p++;
            //不存在这个目录,则新建这个目录
            if(g[id].son.find(t)==g[id].son.end()){
                g[id].son[t]=++clockIndex;
                g[clockIndex].fa=id;
                g[clockIndex].kind=2;
                g[clockIndex].ld=INF;
                g[clockIndex].lr=INF;
                reback.push_back(make_pair(id,t));
                id=clockIndex;
            }
            else {
                int sonid=g[id].son[t];
                if(g[sonid].kind==1){//存在这个文件,并且文件类型是普通文件
                    clockIndex=tclock;
                    REBACK();
                    return "N";
                }
                id=sonid;
            }
        }
    
        //读出文件名
        string t="";
        for(int i=last+1;i<Lpath;i++)t=t+path[i];
        if(g[id].son.find(t)!=g[id].son.end()){
            int sonid=g[id].son[t];
            if(g[sonid].kind==2){
                clockIndex=tclock;
                REBACK();
                return "N";
            }
        }
    
        //向上追溯,检查是否符合ld和lr
        long long py=0;
        if(g[id].son.find(t)==g[id].son.end())
            py=fsize;
        else 
            py=-g[g[id].son[t]].fsize+fsize;
        if(g[id].sld+py>g[id].ld){
            clockIndex=tclock;
            REBACK();
            return "N";
        }
        int now=id;
        while(now!=-1){
            if(g[now].slr+py>g[now].lr){
                clockIndex=tclock;
                REBACK();
                return "N";
            }
            now=g[now].fa;
        }
    
        //加入文件
        if(g[id].son.find(t)==g[id].son.end()){//创建新文件
            g[++clockIndex].kind=1;g[clockIndex].fsize=fsize;
            g[clockIndex].fa=id;g[id].son[t]=clockIndex;
        }
        else g[g[id].son[t]].fsize=fsize;
        g[id].sld+=py;
        while(id!=-1){
            g[id].slr+=py;
            id=g[id].fa;
        }
        return "Y";
    }
    
    string solveR(){//移除文件
        string path;cin>>path;
        int p=1,id=0,Lpath=path.length(),last=-1;
        for(int i=Lpath-1;i>=0;i--){
            if(path[i]=='/'){last=i;break;}
        }
        while(p<last){
            string t="";
            while(p<last && path[p]!='/'){
                t=t+path[p];p++;
            }
            p++;
            if(g[id].son.find(t)==g[id].son.end()){
                return "Y";
            }
            else {
                int sonid=g[id].son[t];
                if(g[sonid].kind==1)return "Y";
                id=sonid;
            }
        }
        string t="";
        for(int i=last+1;i<Lpath;i++)t=t+path[i];
        if(g[id].son.find(t)==g[id].son.end())
            return "Y";
        int delNode=g[id].son[t];
        long long add=0;
        if(g[delNode].kind==1){//是文件
            g[id].sld-=g[delNode].fsize;
            add=g[delNode].fsize;
            g[id].son.erase(g[id].son.find(t));
        }
        if(g[delNode].kind==2){//是目录
            add=g[delNode].slr;
            g[id].son.erase(g[id].son.find(t));
        }
        while(id!=-1){
            g[id].slr-=add;
            id=g[id].fa;
        }
        return "Y";
    }
    
    string solveQ(){//设置配额值
        string path;cin>>path;
        long long LD,LR;
        scanf("%lld%lld",&LD,&LR);
        if(LD==0)LD=INF;
        if(LR==0)LR=INF;
        int p=1,id=0,Lpath=path.length(),last=-1;
        for(int i=Lpath-1;i>=0;i--){
            if(path[i]=='/'){last=i;break;}
        }
        while(p<last){
            string t="";
            while(p<last && path[p]!='/'){
                t=t+path[p];
                p++;
            }
            p++;
            if(g[id].son.find(t)==g[id].son.end()){
                return "N";
            }
            else {
                int sonid=g[id].son[t];
                if(g[sonid].kind==1)return "N";
                id=sonid;
            }
        }
        string t="";
        for(int i=last+1;i<Lpath;i++)t=t+path[i];
        int qNode;
        if(t==""){
            qNode=0;
        }
        else {
            if(g[id].son.find(t)==g[id].son.end())return "N";
            else qNode=g[id].son[t];
        }
        if(g[qNode].kind==1)return "N";
        if(LD<g[qNode].sld || LR<g[qNode].slr)
            return "N";
        g[qNode].ld=LD;g[qNode].lr=LR;
        return "Y";
    }
    
    
    int main(){
        //设置根目录
        g[0].kind=2;
        g[0].ld=INF;g[0].lr=INF;
        g[0].fa=-1;
        int q;scanf("%d",&q);
        char op;
        while(q--){
            cin>>op;
            if(op=='C'){//创建普通文件
                cout<<solveC()<<'
    ';
            }
            if(op=='R'){//移除文件
                cout<<solveR()<<'
    ';
            }
            if(op=='Q'){//设置配额值
                cout<<solveQ()<<'
    ';
            }
        }
        return 0;
    }
  • 相关阅读:
    编写一个最原始的Servlet
    windows 通过cmd使用tail命令
    windows 配置jdk8环境变量
    Windows tomcat简单使用
    红黑树
    HashMap源码分析--jdk1.7
    IDEA debug断点调试技巧--转载
    idea 调试的时候变量的值变成了jar包显示
    浅谈Java中的hashcode方法--转载
    家庭记账本之微信小程序(八)
  • 原文地址:https://www.cnblogs.com/thmyl/p/14470236.html
Copyright © 2011-2022 走看看