当前位置:编程学习 > C/C++ >>

cf#179(div.2)

[cpp]  
/* 
 
A 题,方法:搜索 。。。 
题意:要求(0,0)到(x,y)要拐几个弯!!  
 
 
*/  
#include<iostream>  
#include<cstdio>  
#include<cmath>  
#include<algorithm>  
#include<string>  
using namespace std;  
#define manx 10000  
  
  
int sum,xx,yy;  
  
  
void dfs(int x,int y){  
    if(x>0 && y>0) {  
        if(yy==y && xx<x && xx>=(-x)) { cout<<sum<<endl; return ; } ////尼玛啊,这里等号标错了,WA了许久!!!   
        sum++;   
        dfs(-x,y);   
    }  
    else if(x>0 && y<0) {   
        if(xx==x && yy<=(-y+1) && yy>y){ cout<<sum<<endl; return ; }  
        sum++;   
        dfs(x,-y+1);   
    }  
    else if(x<0 && y<0) {   
        if(yy==y && xx<=(-x+1) && xx>x){ cout<<sum<<endl; return ; }  
        sum++;   
        dfs(-x+1,y);   
    }  
    else if(x<0 && y>0) {   
        if(xx==x && yy>=(-y) && yy<y){ cout<<sum<<endl; return ; }  
        sum++;   
        dfs(x,-y);   
    }  
    else if(x==0 && y==0){   
        if(yy==y && xx<=(x+1) && xx>x){ cout<<sum<<endl; return ; }  
        sum++;   
        dfs(x+1,y);   
    }  
    else if(x==1 && y==0) {  
        if(xx==x && yy<=(y+1) && yy>y) { cout<<sum<<endl; return ; }           
        sum++;    
        dfs(x,y+1);   
    }  
}  
  
  
int main(){      
    while(cin>>xx>>yy){  
        if(xx==0 && yy==0) { cout<<"0"<<endl; continue; }  
        sum=0;  
        dfs(0,0);  
    }  
}   
 
 
[cpp]  
/* 
 
B 题,方法:队列或者模拟。。。 
题意:求连续子段和不超过 t 的最大长度。。。 
 
 
*/   
#include<iostream>  
#include<cstdio>  
#include<algorithm>  
#include<cmath>  
using namespace std;  
#define manx 100009  
  
int x[manx];  
long long s[manx];  
  
int main(){  
    int n,t;  
    while(cin>>n>>t){  
        long long k=1,max=0,p;  
        long long sum=0;  
        for(int i=1;i<=n;i++){  
           scanf("%d",&x[i]);  
           sum += x[i];  
           while(sum>t){  
               p=i-k;  
               if(max<p) max=p;  
               sum -= x[k];  
               k++;  
           }  
        }      
        if(sum<=t) {  
            p=n-k+1;  
            if(max<p) max=p;  
        }  
        cout<<max<<endl;  
    }  
}  
  
/* 
 
4 5  
3 1 2 1 
 
4 6  
3 1 1 4 
 
 
*/  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,