刷题
1.B题:第五周任务 - Virtual Judge (vjudge.net)
这题要对数据进行排序,然后计算相邻的值的差值,然后从小到大依次寻找长度为k的区间,找出最小值,思路很简单,但是我交了发,然后这题我尝试开始使用c++来写题,之前全是使用c语言,导致写题速度很慢,然后现在慢慢的学习c++里面的数据结构;
代码:
#include
using namespace std;
typedef long long LL;
const int N = 500010;
int a[N];
int main()
{
ios::sync_with_stdio(false);//它的作用是关闭与stdio库的同步_关闭同步可以提高程序的输入输出效率
cin.tie(nullptr);//通过将std ::cin.tie(nullptr)设置为确保未缓冲,以改善性能。
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
multisetb;
sort(a+1,a+n+1);//对数据进行排序
for(int i=2;i<=k-1;i++){
b.insert(a[i]-a[i-1]);
}
LL t=0;
LL ans=1e18;
for(int i=k;i<=n;i++){
b.insert(a[i]-a[i-1]);
ans=min(ans,(LL)*b.begin()*(a[i]-a[i-k+1]));
b.erase(b.lower_bound(a[i-k+2]-a[i-k+1]));
}
cout<
C题:第五周任务 - Virtual Judge (vjudge.net)
思路:我刚开始就是想将n转换成k进制的数,结果就是(k*位数-1+最高位的数),但是我没有想到一种情况,就是最高位的数替换其他位的数,比如9 换成 2进制,是1001,比1111小,所以要在上面的情况下减一就行了;
代码:
#include
using namespace std;
typedef long long LL;
int n,k;
int main()
{
cin>>n>>k;
int t=-1;
int temp=0;
int ans=0;
int N=n;
if(n<=k)
{
ans=n;
}
else
{
while(n)
{
temp=n%k;
n/=k;
t++;
}
ans=temp+k*t;
int cnt=0;
for(int i=t;i>=0;i--)
{
cnt+=temp*pow(k,i);
}
if(cnt>N){
ans-=1;
}
}
cout<
线性代数复习:
看了速成视频,感觉还是不够问,接下来准备花点时间将之前的线性代数作业重写一遍;
读书:
看了mysql必知必会第一章,后面要加快进度;