2018第二大周刷题

这大周我们主要以刷题为主,三四节、四五节课我打概刷了五六题吧。我是把第一面的剩的题再刷了2题,第二面刷了几题。第一面看书弄懂了空间换时间。第二面是二维数组,之前把它基本的例题过了一下,这次就是后面简单的题了。我们这次还抽出了一个晚上打usaco上的比赛。我看起来整个人是蒙的。我铜组就蒙了,那我们班还有个银组的那他的题我是不是看都看不懂啊!这次的比赛都有用到二维数组,所以我很庆幸,因为我最近在打二维数组的题。但我还是不会做,我只打了第一题。

刷的题:我抽空把书中的简单算法空间时间分析。把第一面的“接水问题”,“数组求和(大数据版)”,“数组最大值(大数据版)"给打了。 

数组最大值:求一个数的左边,右边,和不包括它本生的最大值。看了简单算法空间时间分析后我感觉十分简单。        #include<bits/stdc++.h>
using namespace std;
long long ml[500010],mr[500010],a[500010];
int main()
{
int n,k,m;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
a[0]=0; a[n+1]=0;
for(int i=1;i<=n;i++)
ml[i]=max(ml[i-1],a[i-1]);
for(int j=n;j>=1;j--)
mr[j]=max(mr[j+1],a[j+1]);
for(int i=1;i<=k;i++)
{
cin>>m;
cout<<ml[m]<<' '<<mr[m]<<' '<<max(ml[m],mr[m])<<endl;
}
return 0;

}                                                                                                                                                                                           不长吧 :-D  

数组求和:就是把数组里的数都加起来(但数据超大)。 看了书后用空间换时间的方法觉得也没多难。 #include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k,a[110000],m;
long long s[110000]={};
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
s[i]=s[i-1]+a[i];
    }
    for(int i=1;i<=k;i++)
    {
    int x,y;
    cin>>x>>y;
    cout<<s[y]-s[x-1]<<endl;
    }
}

接水问题:有一大堆人接水,求等待时间。和数组求和的思路差不多。                                               #include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1100],l[1100]={},s=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
l[i]=l[i-1]+a[i];
for(int i=1;i<=n;i++)
s+=l[i];
cout<<s;
return 0;

}

----------------------------------------------------------------------------------------------------------------------------------

usaco的题贼难。

1:是玩井字。我打了一坨判断。                                                                                                     #include<bits/stdc++.h>

using namespace std;
int main()
{
//freopen("tttt.in","r",stdin);
//freopen("tttt.out","w",stdout);
char a[5][5];
int l=0,y=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
 cin>>a[i][j];
for(int i=1;i<=3;i++)
{
if(a[i][1]==a[i][2]&&a[i][2]==a[i][3]) y++;
else if(a[i][1]==a[i][2]||a[i][2]==a[i][3]||a[i][1]==a[i][3]) l++;
}
for(int i=1;i<=3;i++)
{
if(a[1][i]==a[2][i]&&a[2][i]==a[3][i]) y++;
else if(a[1][i]==a[2][i]||a[2][i]==a[3][i]||a[1][i]==a[3][i]) l++;
}
if(a[1][1]==a[2][2]&&a[2][2]==a[3][3]) y++;
else if(a[1][1]==a[2][2]||a[2][2]==a[3][3]||a[1][1]==a[3][3]) l++;
if(a[1][3]==a[2][2]&&a[2][2]==a[3][1]) y++;
else if(a[1][3]==a[2][2]||a[2][2]==a[3][1]||a[1][3]==a[3][1]) l++;
cout<<y<<endl<<l;
//fclose(stdin);
//fclose(stdout);

这么艰辛还只有5个点过。大哭

猜你喜欢

转载自blog.csdn.net/wangzhuojia/article/details/79731955
今日推荐