202112-1
#include<iostream>
using namespace std;
#define N 1e7
int a[201];
int n;
int f(int x)
{
int flag=0;
for(int i=0;i<n;i++)
{
if(a[i]<=x&&x<a[i+1])
{
return i;
flag=1;
break;
}
}
if(flag==0) return n;
}
int main()
{
int m;
int sum=0;
cin>>n>>m;
a[0]=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
sum+=f(a[i])*(a[i+1]-a[i]);
}
sum+=f(a[n])*(m-a[n]);
cout<<sum<<endl;
return 0;
}
202112-2
70分题解:
#include<iostream>
#include<cmath>
using namespace std;
#define N 100001
const int M=1e5;
int a[N];
long long f[M];
long long g[M];
int n,m;
int r;
int ff(int x)
{
int flag=0;
for(int i=0;i<n;i++)
{
if(a[i]<=x&&x<a[i+1])
{
return i;
flag=1;
break;
}
}
if(flag==0) return n;
}
int main()
{
cin>>n>>m;
a[0]=f[0]=0;
int err=0;
r=m/(n+1);
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=0;i<m;i++)
{
f[i]=ff(i);
g[i]=i/r;
err+=abs(f[i]-g[i]);
}
cout<<err<<endl;
return 0;
}
100分(注:sum用int定义依旧70分,用long long定义100分)
#include<iostream>
#include<cmath>
using namespace std;
#define N 100001
int a[N];
int n,m;
int Long=0;
int r;
long long sum=0;
long long g(int x)
{
return x/r;
}
int main()
{
cin>>n>>m;
a[0]=0;
a[n+1]=m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
r=m/(n+1);
for(int i=1;i<=n+1;i++){
long long sum1=0;
for(int j=a[i-1];j<=a[i]-1;j=j+Long){
int NumEnd=(g(j)+1)*r-1;
if(NumEnd>a[i]-1) NumEnd=a[i]-1;
int NumLong=NumEnd-j+1;
long long f_g=abs(i-1-g(j));
sum1=sum1+f_g*NumLong;
Long=NumLong;
}
sum=sum+sum1;
}
cout<<sum<<endl;
return 0;
}
|