第一题,普及-,分糖果,初步浏览题目发现,如果L与R的差值>=n,那么这位小朋友一定能拿走n-1块糖果作为奖励(因为这个区间一定含有一个n的倍数,让这个倍数-1就行),如果区间长度<n,那么在分类讨论一下就行,这题就是考数学逻辑的,没什么特别之处。
而且我的分类讨论也只是写一步看一步,思路不是特别清晰,只是做到最后发现有几种情况可以合并到前面的情况里,所以代码也比较简洁(主要是端点与n的倍数重合的情况相对麻烦)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,l,r;
int main()
{
cin>>n>>l>>r;
if((r-l)>=n)
cout<<n-1;
else
{
ll num1=(l/n)*n;
ll num2=num1+n;
ll num3=num2+n;
if(r<num2)
cout<<r-num1;
else if(num2==r)
{
if(r!=l)
cout<<n-1;
else
cout<<0;
}
else // r介于num2与num3
cout<<n-1;
}
return 0;
}
第二题 ,普及-,解密,题目比较短,爽!
经分析可知是一个纯数学题,很简单,稍微算一下就可以了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,e,d,k,p,q;
int main()
{
cin>>k;
while(k--)
{
cin>>n>>e>>d;
ll sum=n+2-e*d;
if(sum<=0)
cout<<"NO"<<endl;
else
{
ll diff2=n*n+4-2*n*e*d-4*e*d+e*e*d*d;
ll diff=sqrt(diff2);
if(diff*diff!=diff2)
cout<<"NO"<<endl;
else
{
p=(sum+diff)/2;
q=sum-p;
if(p>0&&q>0)
{
if(p>q)
{
ll temp=p;
p=q;
q=temp;
}
cout<<p<<' '<<q<<endl;
}
else
cout<<"NO"<<endl;
}
}
}
return 0;
}
洗澡去哩~~
今日日记~
怎么说呢 今天过得很舒服。早上程序设计看懂了学长的SAT求解代码,现在前进的目标总算是有啦!也就是说应该在也不会有碌碌无为的情况发生了~~下面就是查资料 添加新的求解策略,然后下周再改数独。
下午的习概课一直在看SAT的硕士论文,略懂一二,但是没代码实现,有点纸上谈兵的感觉。最后还是在github上找到了相关代码,明天程序设计课上跑一下试试😆。
最后一节离散课老师长得好年轻!感觉就像普通的大学生,不像是18年毕业的硕士啊(怎么会有人越长越年轻啊啊啊啊啊啊啊)离散课听的也很舒服,做了一些笔记,感觉学习也是步入正轨了哈哈😄
晚上去东操练手语了,认识了一些新朋友,不过我感觉我融入不了这个家庭,有点难绷,总的来说这学期不是很想再拓展新的人际关系了。
明天还要打数模哩!加油!
美好的一天呐😊