头像

cbc




离线:16小时前


活动打卡代码 AcWing 3227. 折点计数

cbc
9天前
#include <iostream>
using namespace std;
const int N = 1010;
int a[N];

int main()
{
    int n,cnt = 0;
    cin >> n;
    for(int i = 1;i <= n;i++){
        cin >> a[i];
    }
    for(int i = 2;i < n;i++){
        if(a[i] < a[i - 1] && a[i] < a[i + 1]){
            cnt++;
        }
        if(a[i] > a[i - 1] && a[i] > a[i + 1]){
            cnt++;
        }
    }
    cout << cnt << endl;
    return 0;
}


活动打卡代码 AcWing 3232. 最大波动

cbc
9天前

思路: 简单模拟

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int n,last,now;
    cin >> n >> last;
    int ans = 0;
    for(int i = 1;i < n;i++){
        cin >> now;
        int t = abs(now - last);
        if(t > ans){
            ans = t;
        }
        last = now;
    }
    cout << ans;
    return 0;
}


活动打卡代码 AcWing 3203. 画图

cbc
13天前
#include <iostream>
using namespace std;
const int N = 100 + 5;
//左下角的坐标标记矩形的涂色状态 
bool a[N][N];

int main()
{
    int n;
    cin >> n;
    while(n--){
        int x1,y1,x2,y2;
        cin >> x1 >> y1 >> x2 >> y2;
        for(int i = x1;i < x2;i++){
            for(int j = y1;j < y2;j++){
                a[i][j] = true;
            }
        }
    }
    int ans = 0;
    for(int i = 0;i <= 100;i++){
        for(int j = 0;j <= 100;j++){
            ans += a[i][j];
        }
    } 
    cout << ans << endl;
    return 0;
} 


活动打卡代码 AcWing 3208. Z字形扫描

cbc
14天前

模拟

#include <iostream>
using namespace std;
const int N = 500 + 5;
int a[N][N];

int main()
{
    int n;
    cin >> n;
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            cin >> a[i][j];
        } 
    }
    //Z字形扫描
    //定义方向数组,右上,右,左下,下 
    int dx[] = {-1,0,1,1};
    int dy[] = {1,1,-1,0};
    int dir = 0;            //初始方向右上 
    int x = 1,y = 1;
    for(;;){
        cout << a[x][y] << " ";
        if(x == n && y == n){
            break;
        }       
        //右方 
        if(dir == 1){
            dir = (x == 1) ? 2 : 0;     
        } 
        //下方 
        else if(dir == 3){
            dir = (y == 1) ? 0 : 2; 
        }
        //右上方,只有当到达右边界或者上边界才切换方向 
        else if(dir == 0){
            if(y == n){     //右边界往下 
                dir = 3;
            } 
            else if(x == 1){//上边界往右
                dir = 1; 
            } 
        } 
        //左下方,只有到达左边界才切换方向
        else{
            if(x == n){     //下边界往右 
                dir = 1; 
            }   
            else if(y == 1){//左边界往下 
                dir = 3;
            } 
        } 
        x += dx[dir];
        y += dy[dir]; 
    } 
    return 0;
} 


活动打卡代码 AcWing 1477. 拼写正确

cbc
15天前
//拼写正确 
#include <iostream>
#include <string>
using namespace std;
const string nums[] = {"zero","one","two","three","four",
                  "five","six","seven","eight","nine"};

int main()
{
    string s;
    cin >> s;
    int x = 0;
    for(int i = 0;i < s.size();i++){
        x += s[i] - '0';
    }
    if(x == 0){
        cout << nums[0];
        return 0;
    }
    string ans;
    //x逆序 
    while(x){
        ans += x % 10 + '0';
        x /= 10; 
    }
    //输出
    for(int i = ans.size() - 1;i >= 0;i--){
        cout << nums[ans[i] - '0'] << " ";
    } 
    return 0;
} 


活动打卡代码 AcWing 445. 数字反转

cbc
17天前

题意:数字反转,高位0去除

思路:简单模拟

#include <iostream>
using namespace std;
//整数反转 
int f(int);

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

//整数反转 
int f(int x)
{
    int f = 1,ans = 0;
    if(x < 0){
        f = -1;
        x = -x;
    } 
    while(x){
        ans = ans * 10 + x % 10;
        x /= 10;
    }
    return f * ans;
} 



活动打卡代码 AcWing 449. 质因数分解

cbc
18天前

题意:给定一个正整数n是2个质因数的乘积,输出较大的质数

思路:暴力枚举小的整数x,只要x是n的因子即可

#include <iostream> 
using namespace std;

int main()
{
    int n;
    cin >> n;
    for(int i = 2;i <= n / i;i++){
        if(n % i == 0){
            cout << n / i << endl;
            break;
        }
    }
    return 0;
}


活动打卡代码 AcWing 441. 数字统计

cbc
19天前

题意:统计[L,R]数字2出现次数

思路:暴力枚举

#include <iostream>
using namespace std;
//求整数n中x的出现次数 
int f(int n,int x = 2);

int main()
{
    int l,r,cnt = 0;
    cin >> l >> r;
    for(int i = l;i <= r;i++){
        cnt += f(i);
    } 
    cout << cnt;
    return 0;
}

//求整数n中x的出现次数 
int f(int n,int x)
{
    int ans = 0;
    while(n){
        ans += (n % 10 == x);
        n /= 10;
    }
    return ans;
}


活动打卡代码 AcWing 458. 比例简化

cbc
20天前

题意:给定一个比例a / b,要求简化比例为x / y,使得x和y不超过给定的整数l并且x和y互质且x / y - a / b尽可能小

解题思路:根据题意,暴力枚举x和y即可

#include <iostream>
using namespace std;
//求x和y的最大公约数
int gcd(int x,int y){
    return y == 0 ? x : gcd(y,x % y);
}
int main()
{
    int a,b,l;
    cin >> a >> b >> l;
    int x = 100,y = 1;  //给定最大值
    //暴力枚举分子和分母
    for(int i = 1;i <= l;i++){
        for(int j = 1;j <= l;j++){
            //分子和分母互质并且i/j >= a/b
            if(gcd(i,j) > 1 || i * b < j * a){
                continue;
            }
            //i/j满足条件并且尽可能小
            if(i * y < j * x){
                x = i;  y = j;
            }   
        }
    }
    cout << x << " " << y;
    return 0;
}


活动打卡代码 AcWing 1262. 鱼塘钓鱼

cbc
20天前
/*****鱼塘钓鱼*****
枚举+多路归并排序
1.枚举最远钓到哪个鱼塘
2.总钓鱼时间= t-走的时间 
********************/
#include <iostream>
#include <algorithm> 
#include <cstring>
using namespace std;
const int N = 110;
int a[N],d[N],len[N],tm[N];
int get(int x)
{
    return max(0,a[x] - d[x] * tm[x]);
} 
int solve(int n,int x);

int main()
{
    int n,T;
    cin >>n;
    for(int i = 1;i <= n;i++){
        cin >> a[i];
    }
    for(int i = 1;i <= n;i++){
        cin >> d[i];
    }
    for(int i = 2;i <= n;i++){
        cin >> len[i];
        len[i] += len[i - 1];   //第1个鱼塘到第i个鱼塘的距离 
    }
    cin >> T;
    int ans = 0;
    for(int i = 1;i <= n;i++){
        ans = max(ans,solve(i,T - len[i]));
    } 
    cout << ans;
    return 0;
}

int solve(int n,int x)
{
    int ans = 0;
    memset(tm,0,sizeof tm);
    for(int i = 0;i < x;i++){
        int t = 1;
        for(int j = 1;j <= n;j++){
            if(get(j) > get(t)){
                t = j;
            }
        } 
        ans += get(t);
        tm[t]++;
    }
    return ans;
}