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

POJ 2012金华邀请赛 (持续更新)

第一题,水题,但是题目读了很久,英语功底果然很差,主要是第二次排序的时候是按位排序,先按个位从小到大,然后是十位从小到大。题目描述太奇葩,这句话领会了很久。。
POJ 4044
[cpp] 
#include <iostream> 
#include <cstdio> 
#include <algorithm> 
#include <string> 
#include <cmath> 
#include <cstring> 
#include <queue> 
#include <set> 
#include <vector> 
#include <stack> 
#include <map> 
#include <iomanip> 
#define PI acos(-1.0) 
#define Max 2005 
#define inf 1<<28 
#define LL(x) (x<<1) 
#define RR(x) (x<<1|1) 
#define FOR(i,s,t) for(int i=(s);i<=(t);++i) 
#define ll long long 
using namespace std; 
 
int a[50],b[50]; 
int v[200]; 
bool cmp(int a,int b) 

    return a>b; 

bool cmp1(int a,int b) 

    if(a%10!=b%10)return (a%10)<(b%10); 
    return (a/10)<(b/10); 

int main() 

    int T; 
    int n,m; 
    cin>>T; 
    while(T--) 
    { 
        cin>>n>>m; 
        int t; 
        memset(v,0,sizeof(v)); 
        memset(a,0,sizeof(a)); 
        memset(b,0,sizeof(b)); 
        int num1=0; 
        for(int i=0;i<n;i++) 
        { 
            cin>>t; 
            if(!v[t]) 
            { 
                a[num1++]=t; 
                v[t]=1; 
            } 
        } 
        memset(v,0,sizeof(v)); 
        int num2=0; 
        for(int i=0;i<m;i++) 
        { 
            cin>>t; 
            if(!v[t]) 
            { 
                v[t]=1; 
                b[num2++]=t; 
            } 
        } 
        sort(a,a+num1,cmp); 
        sort(b,b+num2,cmp); 
        int mm=0; 
        int index=-1; 
        int k; 
        for(int i=0;i<num1;i++) 
        { 
            for(int j=0;j<num2;j++) 
            { 
                if(a[i]==b[j]) 
                { 
                    for(k=1;k+i<num1&&k+j<num2;k++) 
                    { 
                        if(a[i+k]!=b[j+k]) 
                        break; 
                    } 
                    if(mm<k) 
                    { 
                        mm=k; 
                        index=i; 
                    } 
                } 
            } 
        } 
        int ans[105]; 
        int ans1=0; 
        if(!mm) 
        { 
            cout<<"NONE"<<endl; 
            continue; 
        } 
        bool flag=0; 
        for(int i=index;i<index+mm;i++) 
        { 
            ans[ans1++]=a[i]; 
            if(flag) 
            cout<<" "; 
            cout<<a[i]; 
            flag=1; 
        } 
        cout<<endl; 
        sort(ans,ans+ans1,cmp1); 
        cout<<ans[0]; 
        for(int i=1;i<ans1;i++) 
        cout<<" "<<ans[i]; 
        cout<<endl;&n

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,