Codeforces Round #671 解题报告

题目链接

A、Digit Game

思维题,写的有点麻烦,具体看代码。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    
    
    int t;
    cin >> t;
    while(t--){
    
    
        int n;
        string a;
        cin >> n >> a;
        if(n==1){
    
    
            int temp = a[0] - '0';
            if(temp%2==0)
                cout << 2 <<endl;
            else
                cout << 1 <<endl;
        }else{
    
    
            if(n%2==0){
    
    
                bool flag=0;
                for(int i=1;i<n;i+=2){
    
    
                    int tt = a[i]-'0';
                    if(tt%2==0)
                    {
    
    
                        cout << 2 <<endl;
                        flag = 1;
                        break;
                    }
                }
                if(!flag)
                    cout << 1 <<endl;
            }else{
    
    
                bool flag = 0;
                for(int i=0;i<n;i+=2){
    
    
                    int tt = a[i]-'0';
                    if(tt%2==1)
                    {
    
    
                        cout << 1 <<endl;
                        flag = 1;
                        break;
                    }
                }
                if(!flag)
                    cout << 2 <<endl;
            }
        }
    }
    return 0;
}

B、Stairs

题意: 楼梯的阶数不限,但如果对于 n 阶楼梯,它的第 i 列应该是由 i 个楼梯由单元格组成的n个不相交的正方形覆盖,则称为nice楼梯。 现在给你 x个方块,问你能制造多少个不同的楼梯。
思路:参考博客

构造+寻找规律,很难想到……

while(t--)
{
    
    
    cin>>x;
    int cnt=0;
    ll temp;
    for(ll i=1;;)
    {
    
    
        temp = (i+1)*i/2;//多少块木块
        if(x<temp) break;
        x -= temp;
        cnt++;
        i=i*2+1;//多少个整题木块
    }
    cout<<cnt<<endl;
    }

D1、Sage’s Birthday (easy version)

水题

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[100010];
ll b[100010];
int main(){
    
    
    int n;
    cin >> n;
    for(int i=0;i<n;i++){
    
    
        cin >> a[i];
    }
    sort(a,a+n);
    int k=0;
    for(int i=0;i<n/2;i++){
    
    
        b[k++] = a[n/2+i];
        b[k++] = a[i];
    }
    if(n%2==1)
        b[k++] = a[n-1];
    int num = 0;
    for(int i=1;i<n-1;i++)
    {
    
    
        if(b[i]<b[i-1]&&b[i]<b[i+1])
            num++;
    }
    cout << num <<endl;
    for(int i=0;i<n;i++)
        cout << b[i] << " ";
    cout <<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45949914/article/details/108699158