Educational Codeforces Round 96 (Rated for Div. 2)

A. Number of Apartments

题意:求方程的解

思路:直接模拟就行

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int num;
        int n;
        scanf("%d",&n);
        int flag=0;
        int a,b,c;
        for(int i=0;i<=n/7;i++){
            int rest=n-i*7;
            a=i;
            for(int j=0;j<=rest/5;j++){
                int r=rest-j*5;
               // printf("%d %d %d\n",i,j,r);
                if(r%3==0){
                    flag=1;
                    b=j;
                    c=r/3;
                    break;
                }
            }
            if(flag==1){
                printf("%d %d %d\n",c,b,a);
                break;
            }
        }
        if(flag==0){
            printf("-1\n");
        }
    }
}

B. Barrels

题意:问经过k次倒水,最多的水和最少的水容量相差多少,并且使这个值最大,则此时这个值是多少

思路:存入数组然后排序,从后往前加和,再减第一个最小的,(有可能n-1=k,那最小的就是0)

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxx=2e5+10;
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n,k,kk;
        scanf("%d %d",&n,&k);
        kk=k;
        int a[maxx];
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        long long int sum=a[n-1];
        for(int i=n-2;i>=0;i--){
            if(k>0){
                sum+=a[i];
                k--;
            }
        }
        if(kk=n-1){
            printf("%lld\n",sum);
        }else{
            printf("%%lld\n",sum-a[0]);
        }
 
    }
}

C. Numbers on Whiteboard

题意:就是从1-n,每次操作就是找出两个数进行删除,并且增加个(a+b)/2,问经过n-1次操作,剩下的最后一个数最小是多少

思路:看代码输出,其实a和a-2进行一次操作就是-1

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxx=2e5+10;
int main(){// 1 2 3 4 5 6
    int t;
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        int a=n,b=n-1;
        int j=1;
        printf("2\n");
        printf("%d %d\n",a,b);
        b--;
        while(b!=0){
            printf("%d %d\n",a,b);
            a--;
            b--;
        }
    }
}

 

posted @ 2021-05-14 11:50  bonel  阅读(39)  评论(0编辑  收藏  举报