代码题

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll a,b,n;
cin>>a>>b>>n;
ll day=1;
ll sum=0;
while(sum<n)
{
if(day%7>=1&&day%7<=5)
sum+=a;
else if(day%7==6||day%7==0)
sum+=b;
day++;
}
cout<<day-1<<endl;
return 0;
}
***该题需要注意的就是要用long long,写的时候未考虑是否会超时***
***往往取模是一种很好的方法减少时间复杂度***
优化后
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll a,b,n;
cin>>a>>b>>n;
ll ans = 5*a+2*b;
ll day=1;
ll sum=0;
day = day+n/ans*7;
n=n%ans;
while(sum<n)
{
if(day%7>=1&&day%7<=5)
sum+=a;
else if(day%7==6||day%7==0)
sum+=b;
day++;
}
cout<<day-1<<endl;
return 0;
}

#include<iostream>
using namespace std;
const int maxn = 10000+5;
int len[maxn]={0};
int maxHeight[maxn]={0};
int main()
{
int n;
cin>>n;
int flag=0;
int p=1;
int t =4*n+1;
for(int i=1;i<=n;i++)
{
len[i]++;
maxHeight[i]++;
}
while(t--)
{
if(flag==0) //flag=0 正着走,flag=1逆着走
{
len[p]=0;
for(int i=1;i<=n;i++)
{
len[i]++;
if(len[i]>maxHeight[i])
maxHeight[i]=len[i];
}
p++;
if(p==n+1)
{
p=n-1;
flag=1;
}
continue;
}
if(flag==1)
{
len[p]=0;
for(int i=1;i<=n;i++)
{
len[i]++;
if(len[i]>maxHeight[i])
maxHeight[i]=len[i];
}
p--;
if(p==0)
{
p=2;
flag=0;
}
}
}
for(int i=1;i<=n;i++)
cout<<maxHeight[i]<<" ";
return 0;
}
******比赛的时候写的是t=2*n,现在发现走的次数不够,应该是t=4*n*****
版权声明:本文为qq_52025040原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。