码蹄集-竞赛真题第三期

MC0121成绩查询系统

#include<bits/stdc++.h> 

using namespace std;

#define maxn 1010
using namespace std;
struct STUDENT{
    int id, a, b, sum;
};
bool cmp(STUDENT x, STUDENT y){
    if (x.sum > y.sum) return true;
    if (x.sum < y.sum) return false;
    if (x.a > y.a) return true;
    if (x.a < y.a) return false;
    if (x.id > y.id) return true;
    return false;
}
int main() 
{  
    STUDENT stu[maxn];
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i){
        cin >> stu[i].id >> stu[i].a >> stu[i].b;
        stu[i].sum = stu[i].a +stu[i].b;
    }

    sort(stu,stu+n,cmp);

    int q;
    cin >> q;
    for (int i=1;i<=q;++i){
        int x, y;
        cin >> x >> y;
        if (x==1){
            for (int i =0;i<n;i++)
                if (stu[i].id == y){
                    printf("%d %d\n",stu[i].sum, i + 1);
                    break;
                }
        }
        else{//2号查询
            if (stu[0].sum < y)
                printf("0\n");
            else for (int i=n-1;i>=0;i--)
                    if(stu[i].sum>=y){
                        printf("%d\n",i+1);
                        break;}
        }  

MC0122 检查电脑 

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int p, n;
    cin >> p >> n;
    double ans = 1,q = p/100.0;
    for(int i=1;i<n;i++) ans *= (1-q);
    ans *= q;
    printf("%.2lf\n",ans); 
    return 0;
}

MC0123 最大子面积

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a, b;
    cin >> a >>b;
    if(a<b) swap(a,b); // 保证a大于等于b
    int S = b * b;
    int c = min(b,a-b);
    S += c * c;
    cout << S << endl;
    return 0;
}

 MC0124 降雨量

 

#include<bits/stdc++.h> 

using namespace std;
const int maxn = 1e5+10;
int c[maxn];
int main( )
{
    int A, B, H1, H2, H,n;
    cin >> A >> B >> H1 >> H2 >> H >> n;
    for (int i =1;i <= n; i++) cin >> c[i];
    bool flag = false;
    for (int i=1;i<=n;i++){
        H += c[i] - A;
        if(flag) H -=B;
        H = max(H, 0);
        if (H > H1) flag = true;
        if(H <=H2) flag = false;
    }
    cout << H <<endl;
    return 0;
}

MC0125教材购买

 

#include<bits/stdc++.h> 
using namespace std;
const int maxn = 110;
int main( )
{
    int a[maxn] = {0},c[maxn] = {0};
    int n;
    cin >> n;
    for (int i=1;i <= n;i++)
        cin >> a[i];
    for (int i=1;i<=n;i++)
        cin >> c[i];
    int m;
    cin >> m;
    for (int i=1;i<=m;i++){
        int id, val;
        cin >> id >> val;
        if(val <= a[id]){
            a[id] -= val;
            cout << val * c[id] << '\n';
        }
        else cout << "bugoule" << '\n';
    }
    return 0;
}

MC0126子集统计

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    char a[20],b[20];
    scanf("%s%s", a, b);
    int n = strlen(a);
    int ans = 1;
    for (int i =0;i<n;i++)
    {
        if(a[i]=='1' && b[i]=='0')
            ans*=2;
        if(a[i]=='0' && b[i]=='1')
            ans =0;
    }
    cout << ans <<endl;
    return 0;
}

 也就是说,能够改变满足条件c的数量,只有a=1,b=0的时候,存在两种可能,a=0,b=1则导致c不存在,其余不改变c的数量。

MC0127距离计算

 

#include<bits/stdc++.h> 
using namespace std;
int a[5001];
int sgn(int i, int j){
    int flag;
    if(a[i]-a[j]>0)
        flag = 1;
    if(a[i]-a[j]==0)
        flag = 0;
    if(a[i]-a[j]<0)
        flag = -1;
    return flag* abs(i-j);
}
int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++)
        cin >> a[i];
    int sum=0;
    for (int i=1;i<n;i++)
        for(int j=i+1;j<=n;j++)
            sum +=sgn(i,j);
    cout << sum;
    return 0;
}

MC0128老式计算器

 

#include<bits/stdc++.h> 

using namespace std;
int calc(int n, int k){
    if(n == 0) return 0;
    if(n % k == 0) return calc(n/k,k)+1;
    return calc(n - n % k, k) + n % k;
}
int main( )
{
    int n,k;
    cin >> n >> k;
    if(k==1)
        cout << n << endl;
    else
        cout <<calc(n,k) <<endl;
    return 0;
}

calc采用递归的方式,直至n=0,才算结束。

MC0129序列

#include<bits/stdc++.h> 

using namespace std;
int calc(int n,int k){
    if(n==1)
        return 1;\
    int a =1, b = pow(3,n-2), c = b+1, d= 2*b, e = d+1,
        f = pow(3,n-1);
    if(k>=a && k<=b) return calc(n-1,k);
    if(k>=c && k<=d) return calc(n-1,k-b)+1;
    if(k>=e && k<=f) return calc(n-1,k-d);
}
int main( )
{
    int n,k;
    cin >> n >>k;
    cout << calc(n,k) <<endl;
    return 0;
}

 MC0130苹果树

 

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,m;
    cin >> n >> m;
    int t = 0;
    for (int i =1;i <= m;i++) {
        int c = n/3;
        t +=c;
        n-= c;
        if(c == 0)
            break;
    }
    cout << t << endl;
    return 0;
}

MC0131数数

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    cout << (1<< n) <<endl;
    return 0;
}

 MC0132循环位移

 

#include<bits/stdc++.h> 

using namespace std;
const int maxn=2010;
int a[maxn];

int main( )
{

    int n;
    cin >> n;
    for (int i =1;i<=n;i++)
        cin >> a[i];
    for (int i =n+1;i<=2*n;i++)
        a[i]=a[i-n];
    for (int i = 1;i<=n;i++){
        bool flag = 1;
        for (int j=i+1;j<=i+n-1;j++)
            if(a[j]<a[j-1])
                flag=0;
        if(flag){
            puts("YES");
            return 0;
        }
    }
    puts("NO");
    return 0;
}

puts()函数详解--

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值