CCF-CSP刷题库11-20

CCF-CSP刷题库11-20

 

第十一次认证

201709-1 打酱油

#include
#define MAX 1005 
#define MOD 1000000007
using namespace std;
typedef long long ll;

int main()
{
    int t,n,m,x,y,i,j,k;
    scanf("%d",&n);
    int ans=0;
    while(n){
        if(n>=50){
            n-=50;
            ans+=7;
        }
        else if(n>=30){
            n-=30;
            ans+=4;
        }
        else{
            ans+=n/10;
            n=0;
        }
    }
    printf("%d\n",ans);
    return 0;
}
View Code

201709-2 公共钥匙盒

//枚举时间

#include
#define MAX 1005 
#define MOD 1000000007
using namespace std;
typedef long long ll;

struct Node{
    int key,x,y;
}a[MAX];

int b[MAX];

bool cmp(Node a,Node b){
    if(a.y==b.y) return a.key<b.key;
    return a.y<b.y;
}
int main()
{
    int t,n,m,x,y,i,j,k;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++){
        b[i]=i;
    }
    t=0;
    for(i=1;i<=m;i++){
        scanf("%d%d%d",&a[i].key,&a[i].x,&a[i].y);
        a[i].y+=a[i].x;
        t=max(t,a[i].y);
    }
    sort(a+1,a+m+1,cmp);
    for(i=1;i<=t;i++){  //枚举时间 
        for(j=1;j<=m;j++){  //先还 
            if(a[j].y==i){
                for(k=1;k<=n;k++){
                    if(!b[k]){
                        b[k]=a[j].key;
                        break;
                    }
                }
            }
        }
        for(j=1;j<=m;j++){  //后取 
            if(a[j].x==i){
                for(k=1;k<=n;k++){
                    if(b[k]==a[j].key){
                        b[k]=0;
                        break;
                    }
                }
            }
        }
    }
    for(i=1;i<=n;i++){
        if(i>1) printf(" ");
        printf("%d",b[i]);
    }
    return 0;
}
View Code

201709-3 JSON查询

201709-4 通信网络

//正反向存图遍历

#include
#define MAX 1005 
#define MOD 1000000007
using namespace std;
typedef long long ll;

vector<int> v[MAX],rv[MAX];
int b[MAX],rb[MAX];

void dfs(int x){
    b[x]=1;
    for(int i=0;i){
        int to=v[x][i];
        if(b[to]) continue;
        dfs(to);
    }
}
void rdfs(int x){
    rb[x]=1;
    for(int i=0;i){
        int to=rv[x][i];
        if(rb[to]) continue;
        rdfs(to);
    }
}
int main()
{
    int t,n,m,x,y,i,j,k;
    scanf("%d%d",&n,&m);
    while(m--){
        scanf("%d%d",&x,&y);
        v[x].push_back(y);
        rv[y].push_back(x);
    }
    int ans=0;
    for(i=1;i<=n;i++){
        memset(b,0,sizeof(b));
        memset(rb,0,sizeof(rb));
        dfs(i);
        rdfs(i);
        int f=0;
        for(j=1;j<=n;j++){
            if(b[j]||rb[j]) continue;
            f=1;
            break;
        }
        if(f==0) ans++;
    }
    printf("%d\n",ans);
    return 0;
}
View Code

 

第十二次认证

201712-1 最小差值

#include
#define MAX 1005 
#define MOD 1000000007
using namespace std;
typedef long long ll;

int a[MAX];

int main()
{
    int t,n,m,x,y,i,j,k;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    int ans=INT_MAX;
    for(i=1;i){
        for(j=i+1;j<=n;j++){
            ans=min(ans,abs(a[i]-a[j]));
        }
    }
    printf("%d\n",ans);
    return 0;
}
View Code

201712-2 游戏

//vector存储%处理环形报数删点

#include
#define MAX 1005 
#define MOD 1000000007
using namespace std;
typedef long long ll;

vector<int> v;

int main()
{
    int t,n,m,x,y,i,j,k;
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++){
        v.push_back(i);
    }
    int c=0,p=-1;
    while(v.size()>1){
        c++;p++;
        p%=v.size();
        if(c%k==0||c%10==k){
            v.erase(v.begin()+p);
            p--;
        }
    }
    printf("%d\n",v[0]);
    return 0;
}
View Code

201712-3 Crontab

201712-4 行车路线

//80分(错误),带权边->优先队列+bfs,用b[pos][0..1两种状态]记录当前最优解,只能用更小b更新

#include
#define MAX 505 
#define MOD 1000000007
using namespace std;
typedef long long ll;

struct Node{
    int x,s,p;
    friend bool operator<(Node a,Node b){
        if(a.s==b.s) return a.p>b.p;
        return a.s>b.s;
    }
}no;
priority_queue q;
int a[MAX][MAX];
int p[MAX][MAX];
int b[MAX][2];

int main()
{
    int t,n,m,x,y,z,i,j,k;
    scanf("%d%d",&n,&m);
    memset(a,-1,sizeof(a));
    while(m--){
        scanf("%d%d%d%d",&t,&x,&y,&z);
        a[x][y]=z;a[y][x]=z;
        p[x][y]=t;p[y][x]=t;
    }
    for(i=2;i<=n;i++){
        b[i][0]=1000001;
        b[i][1]=1000001;
    }
    b[1][0]=0;b[1][1]=0;
    no.x=1;no.s=0;no.p=0;
    q.push(no);
    int ans=1000001;
    while(q.size()){
        Node f=q.top();
        q.pop();
        for(i=1;i<=n;i++){
            if(a[f.x][i]==-1) continue;
            ll ts;
            if(p[f.x][i]==0) ts=f.s+a[f.x][i];
            else{
                if(f.p==0) ts=f.s+a[f.x][i]*a[f.x][i];
                else ts=(sqrt(f.s)+a[f.x][i])*(sqrt(f.s)+a[f.x][i]);
            }
            if(ts>=b[i][p[f.x][i]]) continue;
            b[i][p[f.x][i]]=ts;
            if(i==n){
                ans=min(ans,(int)ts);
                continue;
            }
            no.x=i;no.s=ts;no.p=p[f.x][i];
            q.push(no);
        }
    }
    printf("%d\n",ans);
    return 0;
}
View Code

 

第十三次认证

201803-1 跳一跳

#include
#define MAX 1005 
#define MOD 1000000007
using namespace std;
typedef long long ll;

int main()
{
    int t,n,m,x,y,i,j,k;
    int c=0,ans=0;
    while(~scanf("%d",&n)&&n>0){
        if(n==1){
            c=0;
            ans++;
        }
        else{
            c+=2;
            ans+=c;
        }
    }
    printf("%d\n",ans);
    return 0;
}
View Code

201803-2 碰撞的小球

//规律可视为小球间无碰撞(交叉通行),最后按相对大小的初始顺序输出

#include
#define MAX 105 
#define MOD 1000000007
using namespace std;
typedef long long ll;

struct Node{
    int x,i;
}a[MAX],b[MAX];

bool cmp1(Node a,Node b){
    return a.x<b.x;
}
bool cmp2(Node a,Node b){
    return a.i<b.i;
}
int main()
{
    int t,l,n,m,x,y,i,j,k;
    scanf("%d%d%d",&n,&l,&t);
    for(i=1;i<=n;i++){
        scanf("%d",&a[i].x);
        a[i].i=i;
        if(a[i].x+t<=l){
            b[i].x=a[i].x+t;
            continue;
        }
        int p=t-(l-a[i].x);
        if((p/l)&1){
            b[i].x=p%l;
        }
        else{
            b[i].x=l-p%l;
        }
    }
    sort(a+1,a+n+1,cmp1);
    sort(b+1,b+n+1,cmp1);
    for(i=1;i<=n;i++){
        b[i].i=a[i].i;
    }
    sort(b+1,b+n+1,cmp2);
    for(i=1;i<=n;i++){
        if(i>1) printf(" ");
        printf("%d",b[i].x);
    }
    return 0;
}
View Code

201803-3 URL映射

201803-4 棋局评估

 

第十四次认证

201809-1 卖菜

201809-2 买菜

201809-3 元素选择器

201809-4 再卖菜

 

第十五次认证

201812-1 小明上学

201812-2 小明放学

201812-3 CIDR合并

201812-4 数据中心

 

第十六次认证

201903-1 小中大

201903-2 二十四点

201903-3 损坏的RAID5

201903-4 消息传递接口

 

第十七次认证

201909-1 小明种苹果

201909-2 小明种苹果(续)

201909-3 字符画

201909-4 推荐系统

 

第十八次认证

201912-1 报数

201912-2 回收站选址

201912-3 化学方程式

201912-4 区块链

 

第十九次认证

 

第二十次认证

 

 

待更

你可能感兴趣的:(CCF-CSP刷题库11-20)