9.3 刷题

d3538e3df2054780abecfa3253731920.png

第一题,普及-,通过观察发现最多只需要改两位数字。这题没发现什么技巧,就考逻辑思维吧。

主要分了三类,虽然可能不是最优的分类,但是大概也只敲了半个小时吧,代码有点长

第一类 month>=20,第二类 month正常,第三类 month为0,第四类,month在13到19之间

一遍过的哦~~

#include<bits/stdc++.h>
using namespace std;
#define  ll long long
string s;
int month,day;
int ans;
int main()
{
    cin>>s;
    int num1=s[0]-'0',num2=s[1]-'0',num3=s[3]-'0',num4=s[4]-'0';
    month=10*num1+num2;
    day=10*num3+num4;
    if(month>=20)//第一位肯定要改 改成1或0 改为1时可能出现10 11 12;改成0时为1~9月
    {
        ans++;
        if(num2==0||num2==1||num2==2)//num2为0时,只能是10月
//num2为1时,可以为11月或1月,显然1月能到31号,优先改为1月,num2为2时,可以为12月或2月,显然12月能到31号,优先改为12月
        {
            if(day>31)
            ans++;
        }
        else if(num2==3||num2==5||num2==7||num2==8)//num2>2,第一位只能改为0,再分为31天 30天的讨论
        {
            if(day>31)
            ans++;
        }
        else 
        {
            if(day>30)
            ans++;
        }
    }
    else if(month>0&&month<=12)//如果月份正常,最多改一位就行
    {
        if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
        {
            if(day>31)
            ans++;
        }
        else if(month==2)
        {
            if(day>28)
            ans++;
        }
        else
        {
            if(day>30)
            ans++;
        }
    }
    else if(month==0)
    {
        if(day>31)//月份一定改一位,优先1月
        ans+=2;//日也要改
        else
        ans++;
    }
    else//month在13到19之间 优先看日
    {
        if(day<=31)
        ans++;
        if(day>31)
        ans+=2;
    }
    cout<<ans;
    return 0;
}

第二题,普及-,应该是一道考察排序的问题(插入排序),这里由于每次插入新的元素时都需要提前获得元素要插入的位置,所以应该是用二分查找,最后的时间复杂度应该为nlogn。

而且c++里内置的函数很多,温故而知新~不用自己手搓

最后代码如下(一遍过!

#include<bits/stdc++.h>
using namespace std;
#define  ll long long
vector<ll> a;
ll n,w;
ll grade;
bool compare(ll a,ll b)
{
    return a>b;
}
int main()
{
    cin>>n>>w;
    for(int i=1;i<=n;i++)
    {
        ll cur=i*w/100;
        if(cur==0)
        cur=1;
        cin>>grade;
        auto found=lower_bound(a.begin(),a.end(),grade,compare);
        a.insert(found,grade);
        cout<<a[cur-1]<<' ';
    }
    return 0;
}

啊啊啊啊啊中午没睡好觉,下午头疼o(╥﹏╥)o 这么短的代码也敲了好久。

简单说几个要点吧:

第一,lower_bound这个函数返回的是目标元素的下一个位置(这里要自己定义compare函数,如果升序的话就是a<b,降序的话就是a>b),如果最后查找到的位置是在begin()或者end(),会直接返回。

第二,insert的插入是把指定元素插入到指定的位置,其余元素自动后移~如果是begin(),就是插到开头,是end()就是结尾。

最后,题目中所讲的可能获奖人数比计划多一点都不影响分数线,只需要返回排名第i*w的人的分数即可。

 

 

 

哈哈哈哈 当日记写得了。今天早上一节大物,讲得磁场中带电粒子和导体棒的受力 高中学过,听起来没什么压力,就是有点困。

后面一直呆在图书馆,10-18点大概是这么个时间,搞程序设计 然后刷了两道题。真的看电脑太久了会很累,我下午去买了一杯咖啡,然后坐在室外的小圆桌上看了会风景,但是疲劳缓解不了,吃饭的时候还头痛。晚上7点到十点又是程序设计,学长的代码我不会改,因为全是c++,类的知识太多了,没学过。今晚是真的碌碌无为,就好像回到了去年刷头歌一下午一题都做不出来,好像回到了高中数学大题做一中午都做不出来的时候。我好像面对自己无法解决的困难习惯焦虑,我把自己的弱小看作理所当然,期望别人来拯救我。

还有人际关系也是一塌糊涂。除了跟舍友关系很好,跟异性真的合不来一点,线上聊天习惯猜忌,线下碰面又觉得尴尬。而且对于在乎我的人不喜欢搭理。

有时候真的觉得一个人挺好。我必须得有明确的目标,我应该有不顾一切努力前进的勇气,我应该有不顾他人眼光做好自己的决心,我应该有同困难死磕到底绝不放弃绝不焦虑的信心☺我充分爱自己,我没有什么牵挂,我只希望自己能够努力,不断成为理想中的自己🥺

对了!怎么能忘了今晚舍友给的关怀呢

e86f22a166b54437824479fe717f1eff.jpg

 明天加油!

睡觉啦~

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值