原题链接
嗯,看了题目,确实挺长,挺难的。嗯,说的很对。所以,就输出Accepted吧!
#include
#include
int main()
{
printf("Accepted!!!\n");
return 0;
}
仔细读题可知,其实就是统计连续的 x 的大于 2 次的那一部分的次数。
代码
#include
#include
#include
#include
using namespace std;
int main()
{
char a[200];
int n,i,ans=0;
int flog=0;
scanf("%d",&n);
scanf("%s",a);
for(i=2; i<n; i++)
{
if(a[i-1]=='x'&&a[i-2]=='x'&&a[i]=='x')
{
ans++;
flog=1;
}
}
if(flog==1)
printf("%d",ans);
else printf("0");
return 0;
}
因为题目说的是最大的正方形,所以就从输入的木块的数量 n 开始, n 依次减一,并判断是否在输入的这么多的木块中,存在有大于 n 的木块数量。如果存在,则输出 n。
代码
#include
#include
#include
#include
using namespace std;
int main()
{
int k,i,a[10005],n,j;
scanf("%d",&k);
while(k--)
{
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%d",&a[i]);
for(i=n; i>0; i--)
{
int ans=0;
for(j=0; j<n; j++)
{
if(a[j]>=i)
ans++;
}
if(ans>=i)
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
#include
#include
#include
#include
using namespace std;
int main()
{
char a[100005];
scanf("%s",a);
int x=strlen(a);
int i,flog=0;
for(i=6;i<x;i++)
{
if(a[i-1]=='0'&&a[i-2]=='0'&&a[i-3]=='0'&&a[i-4]=='0'&&a[i-5]=='0'&&a[i-6]=='0'&&a[i]=='0')
{
flog=1;
printf("YES\n");
break;
}
else if(a[i-1]=='1'&&a[i-2]=='1'&&a[i-3]=='1'&&a[i-4]=='1'&&a[i-5]=='1'&&a[i-6]=='1'&&a[i]=='1')
{
flog=1;
printf("YES\n");
break;
}
}
if(flog==0)printf("NO\n");
return 0;
}
#include
#include
#include
#include
using namespace std;
int main()
{
int n,ans=1,i;
long long a[100005],maxa=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lld",&a[i]);
for(i=1;i<n;i++)
{
if(a[i]<=a[i-1])
ans=1;
else ans++;
if(ans>maxa)
maxa=ans;
}
printf("%lld",maxa);
return 0;
}
如果糖果总数是奇数的话肯定吃不完,如果是偶数的话,如果最大的糖果数大于总数的一半肯定吃不完,其他的都可以。
代码
#include
#include
#include
#include
using namespace std;
int main()
{
int n,t,i;
int a[100005];
scanf("%d",&t);
while(t--)
{
int sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
if(sum%2==1)
printf("****!!!\n");
else
{
sort(a,a+n);
if(a[n-1]>sum/2)
printf("****!!!\n");
else
printf("NICE!!!\n");
}
}
return 0;
}
#include
#include
#include
using namespace std;
struct nod
{
int s,e;
}v[100005];
bool cmp(nod x,nod y)
{
if(x.e==y.e)
return x.s>y.s;
return x.e<y.e;
}
int main()
{
int m;
scanf("%d",&m);
while(m--)
{
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d",&v[i].s,&v[i].e);
sort(v,v+n,cmp);
int ans=1,t=0;
for(i=1;i<n;i++)
{
if(v[i].s>v[t].e)
{
ans++;
t=i;
}
}
printf("%d\n",ans);
}
return 0;
}
这道题就是用栈做的( 他题目说的哟~ )如果有 a 又有一个 b,那么就出栈。最后判断一下栈是否为空即可。
代码
#include
#include
#include
#include
#include
using namespace std;
int main()
{
char a[1005];
int i;
stack<char>q;
scanf("%s",a);
int x=strlen(a);
q.push(a[0]);
for(i=1;i<x;i++)
{
if(!q.empty()&&a[i]=='b'&&q.top()=='a')
q.pop();
else
q.push(a[i]);
}
if(!q.empty())
printf("Bad");
else printf("Good");
return 0;
}
#include
#include
int main()
{
long long t,i,n;
scanf("%lld",&t);
while(t--)
{
long long a=1;
scanf("%lld",&n);
for(i=1;i<=n;i++)
{
a*=i;
}
printf("%lld\n",a);
}
return 0;
}
本题就是求斐波那契数,只不过数比较大,需要用递归的记忆化来优化一下。
代码
#include
#include
using namespace std;
long long v[100005];
long long pass(long long x)
{
if(v[x])
return v[x];
if(x==1||x==2)
return 1;
return v[x]=pass(x-1)+pass(x-2);
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%lld",pass(n));
printf("\n");
}
return 0;
}
来了,来了,二维数组(矩阵)又来了。令人头疼的线代。把整个矩阵分成两个三角形,再寻找规律输出即可。
代码
#include
#include
#include
#include
int main()
{
int n,i,j,k,l,kk,ll;
while(~scanf("%d",&n))
{
for(i=0; i<n; i++)
{
k=(i+1)*(i+1);
l=i*i;
for(j=i; j>=0; j--)
{
if(i%2==1)
{
printf("%2d ",k);
k--;
}
else
{
printf("%2d ",l+1);
l++;
}
}
for(j=i+1; j<n; j++)
{
kk=(j+1)*(j+1)-i;
ll=j*j+1+i;
if(j%2==0)
printf("%2d ",kk);
else
printf("%2d ",ll);
}
printf("\n");
}
printf("\n");
}
return 0;
}
#include
#include
#include
#include
using namespace std;
int main()
{
int n,i,j,a[1000];
int ans=0;
scanf("%d",&n);
for(i=n-1; i>=0; i--)
scanf("%d",&a[i]);
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(a[j]==a[i])
{
a[j]=0;
}
}
}
for(i=0; i<n; i++)
{
if(a[i]!=0)
ans++;
}
printf("%d\n",ans);
for(i=n-1; i>=0; i--)
{
if(a[i]!=0)
printf("%d ",a[i]);
}
return 0;
}