201604csp

201604-01c++

#include<iostream>
using namespace std;
int main(){
    int n,x1,count=0,flag=0;
    cin>>n>>x1;
    while(--n){
        int x2;
        cin>>x2;
        if(x1<=x2){
            if(flag==-1)    count++;
            flag=1;
        }
        else{
            if(flag==1) count++;
            flag=-1;
        }
        x1=x2;
    }
    cout<<count<<endl;
    return 0;
}

201604-02c++

#include<iostream>

using namespace std;

int a[17][11];
int b[5][5];

int main()
{
	int i,j,k,n;
//读入15行10列的初始方格图
	for(i=1;i<=15;i++)
	  for(j=1;j<=10;j++)
	    cin>>a[i][j];
//技巧,在方格图底部多加一行并使之为1,这样避免判断出界的问题
	for(j=1;j<=10;j++)
	  a[16][j]=1;
//读入4行4列的板块图案
	for(i=1;i<=4;i++)
	  for(j=1;j<=4;j++)
	    cin>>b[i][j];
	cin>>n;
//求出最大下降距离d,初始为15
	int d=15;
	for(i=4;i>0;i--){ //计算板块图案每行最大的下降距离
	  int sum=0;
	  for(k=1;k<=4;k++)
	    sum+=b[i][k];
	  if(sum==0)//如果这是一个空行,就不用判断
		continue;
	  int t=0;//初始下降距离为0
	  for(j=i+1;j<=16;j++){//从此行的下一行开始判断
	  	for(k=1;k<=4;k++)
	      if(b[i][k]+a[j][n+k-1]==2)
	        break;
	    if(k==5)
	      t++;
	    else
	      break;
	  }
	  d=min(d,t);
	}
	for(i=1;i<=4;i++)
	  for(j=1;j<=4;j++)
	    if(b[i][j]==1)
		  a[i+d][n+j-1]=1;
	//输出变换后的结果
	for(i=1;i<=15;i++){
		for(j=1;j<=10;j++)
		  cout<<a[i][j]<<" ";
	    cout<<endl;
	}
	return 0;
}


/*#include<iostream>
using namespace std;


int main()
{
    int s[15][10],t[4][4],t1[4][4],x;
    for(int i=0; i<15; i++)
        for(int j=0; j<10; j++)
            cin>>s[i][j];
    for(int i=0; i<4; i++)
        for(int j=0; j<4; j++)
            cin>>t[i][j];
    cin>>x;
    int left=0,right=0,top=0,bottom=0;
    for(int i=0; i<4; i++)
    {
        if(t[i][0]==0&&t[i][1]==0&&t[i][2]==0&&t[i][3]==0)
            top++;
        else
            break;
    }
    for(int i=3; i>=0; i--)
    {
        if(t[i][0]==0&&t[i][1]==0&&t[i][2]==0&&t[i][3]==0)
            bottom++;
        else
            break;
    }
    for(int i=3; i>=0; i--)
    {
        if(t[0][i]==0&&t[1][i]==0&&t[2][i]==0&&t[3][i]==0)
            right++;
        else
            break;
    }
    for(int i=0; i<4; i++)
    {
        if(t[0][i]==0&&t[1][i]==0&&t[2][i]==0&&t[3][i]==0)
            left++;
        else
            break;
    }
    int n1,m1;
    n1=3-bottom;
    m1=3-right;
    for(int i=top,i1=0; i<=n1,i1<=n1-top; i++,i1++)
    {
        for(int j=left,j1=0; j<=m1,j1<=m1-left; j++,j1++)
        {
            t1[i1][j1]=t[i][j];
        }
    }
    int flag,flag_i=0,i,j;
    for(i=3-bottom; i<15; i++)
    {
        for(j=x+left-1; j<=x-right+2; j++)
        {
            if(s[i][j]==0) flag_i=1;
            else
            {
                flag_i=-1;
                break ;
            }
        }
        if(flag_i==-1)   break;
    }
    for(int p=n1-top; p>=0,i>=15-n1; p--,i--)
    {
        flag=0;
        for(int q=0,q1=x+left-1; q<=m1-left,q1<=x-right+2; q++,q1++)
        {
            if(t1[p][q]==1&&s[i][q1]==1)
            {
                flag=-1;
                break ;
            }
            if((t1[p][q]==0&&s[i][q1]==1)||(t1[p][q]==0&&s[i][q1]==0)||(t1[p][q]==1&&s[i][q1]==0))
            {
                flag++;
            }

        }
        if(flag==m1)
        {
            for(int q=0,q1=x+left-1; q<=m1,q1<=x-right+2; q++,q1++)
            {
                if(s[i][q1]==0) s[i][q1]=t1[p][q];
            }
        }
    }
    for(int a=0; a<15; a++)
    {
        for(int b=0; b<10; b++)
        {
            cout<<s[a][b]<<' ';
        }
        cout<<endl;
    }
    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值