三道好题分享

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 三道好题分享,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

4366. 上课睡觉 – AcWing题库

这个视频讲解一定不能倍速看 

 AcWing 4366. 上课睡觉(寒假每日一题2023) – AcWing

三道好题分享

 三道好题分享

#include <iostream>

using namespace std;

const int N = 100010;

int n;
int w[N];

bool check(int cnt)//cnt=sum/i表示每堆的石子数
{
    for (int i = 0, s = 0; i < n; i ++ )
    {
        s += w[i];
        if (s > cnt) return false;
        if (s == cnt) s = 0;//刚好满足一堆,那么清零,准备下一堆
    }                       //如果s<cnt,它还可以继续增加石子数
    return true;
}

int main()
{
    int T;
    scanf("%d", &T);
    while (T -- )
    {
        scanf("%d", &n);
        int sum = 0;
        for (int i = 0; i < n; i ++ )
        {
            scanf("%d", &w[i]);
            sum += w[i];
        }

        for (int i = n; i; i -- )//从大到小枚举,方便找到最大的i
        {         
            if (sum % i == 0 && check(sum / i))//由于最终每堆的石子数量相等,所以sum%i==0
            {                                  // sum/i是每堆的石子数
                printf("%d\n", n - i);
                break;
            }
        }
    }
    return 0;
}

P2010 [NOIP2016 普及组] 回文日期 – 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

三道好题分享 

这个题虽然题目很长,但 暗藏玄只因

 下面代码中的做法不是刻意求出回文串

而是自己先写出一半,再复刻出另一半(相当于自己写出了一个回文串)

然后判断这个自己写出的数是否在题目给出的范围内

Oh xie!

三道好题分享

 

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
	int k[367],n=0,t,p,q,ans=0;
	cin>>p>>q;
	for(int i=1;i<=12;i++)
	{
		for(int j=1;j<=a[i];j++)
		{
			t=i*100+j;//先算出一半
			k[++n]=(t%10*1000+t/10%10*100+t/100%10*10+t/1000%10)*10000+t;//再复刻出另一半
			if(k[n]>=p&&k[n]<=q)//在题目中给出的两个日期中间
			ans++;
		}
	}
	cout<<ans;
	return 0;
}

 P2957 [USACO09OCT]Barn Echoes G – 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

 三道好题分享

三道好题分享

#include <bits/stdc++.h>
using namespace std;
string s1,s2;
int len1=1,len2=1; 
int main()
{
    cin>>s1>>s2;
    for(int i=1;i<=min(s1.size(),s2.size());i++)//比较s1与s2长度,并取最小 
    {
        if(s1.substr(0,i)==s2.substr(s2.size()-i,i))//提取子串 
        {
            len1=i;
        }
        if(s2.substr(0,i)==s1.substr(s1.size()-i,i))
        {
            len2=i;
        }
     }
    if(len1>len2)//比较大小,输出 
    {
        cout<<len1;
    }
    else
    {
       cout<<len2;
    }
}

Code over!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131427.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!