zoukankan      html  css  js  c++  java
  • PAT速刷--代码记录

    PAT B1032 挖掘机技术哪家强

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int school[100005];
        int n,schoolnum,score;
        scanf("%d",&n);
        memset(school,0,sizeof(school));
        int maxscore=0;
        int maxschool=1;
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&schoolnum,&score);
            school[schoolnum]+=score;
            if(school[schoolnum]>maxscore)
            {
                maxschool=schoolnum;
                maxscore=school[schoolnum];
            }
        }
        printf("%d %d",maxschool,maxscore);
        return 0;
    }
    View Code

     PAT B1036 跟奥巴马一起编程

    #include<stdio.h>
    int main()
    {
        int num;
        char c;
        scanf("%d %c",&num,&c);
        int row=num/2+num%2;
        for(int i=1;i<=row;i++)
        {
            if(i==1||i==row)
            {
                for(int j=1;j<=num;j++)
                    printf("%c",c);
            }
            else
            {
                printf("%c",c);
                for(int j=2;j<=num-1;j++)
                    printf(" ");
                printf("%c",c);
            }
            printf("
    ");
        }
        return 0;
    }
    View Code

     codeup 1928 日期差值

    #include<stdio.h>
    int run(int year)
    {
        if((year%4==0 && year%100!=0)||(year%400==0))
            return 1;
        return 0;
    }//闰为true,1
    int t[2][15]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
    int main()
    {
        int year1,year2,month1,month2,day1,day2,num1,num2;
        while(scanf("%d%d",&num1,&num2)!=EOF)
        {
    
        int ans=1;
        if(num1>num2){
            int temp=num1;
            num1=num2;
            num2=temp;
        }//num1<=num2
        day1=num1%100;
        num1=num1/100;
        month1=num1%100;
        year1=num1/100;
        day2=num2%100;
        num2=num2/100;
        month2=num2%100;
        year2=num2/100;
        while(year2-year1>1)
        {
            if((month1==1)||(month1==2 && day1!=29))
                ans=ans+365+run(year1);
            else if(month1==2 && day1==29)
            {
                day1=28;
                ans=ans+365;
            }
            else
                ans=ans+365+run(year1+1);
            year1++;
        }
        while(year2!=year1 || month2!=month1 || day2!=day1)
        {
            day1++;
            ans++;
            if(day1>t[run(year1)][month1])
            {
                day1=1;
                month1++;
                if(month1==13)
                {
                    month1=1;
                    year1++;
                }
            }
        }
        printf("%d
    ",ans);
        }
        return 0;
    }
    View Code

     PAT A1022 D进制的A+B

    #include<stdio.h>
    int main()
    {
        int a,b,d;
        scanf("%d %d %d",&a,&b,&d);
        int num=a+b;
        int temp=0;
        int ans[100];
        while(num){
            ans[temp++]=num%d;
            num=num/d;
        }
        for(int i=temp-1;i>=0;i--)
            printf("%d",ans[i]);
        if(temp==0)
            printf("0");
        return 0;
    }
    View Code

     PAT B1009 说反话

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char ans[80][100];
        int num=0;
        while(scanf("%s",ans[num])!=EOF){
                num++;
        }
        for(int i=num-1;i>0;i--)
            printf("%s ",ans[i]);
        printf("%s",ans[0]);
        return 0;
    }
    View Code

     PAT A1025 PAT Ranking 

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    struct student{
        int score;
        int local_rank;
        int final_rank;
        int location;
        char id[15];
    }stu[30005];
    bool cmp(student a,student b){
        if(a.score!=b.score)
            return a.score>b.score;
        return strcmp(a.id,b.id)<0;
    }
    int main()
    {
        int n,localnum=0,stunum=0,temp;//localnum从1开始有效,stu从0开始
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&temp);
            localnum++;
            int templocal=stunum;
            for(int j=1;j<=temp;j++)
            {
                scanf("%s %d",stu[stunum].id,&stu[stunum].score);
                stu[stunum].location=localnum;
                stunum++;
            }
            sort(stu+templocal,stu+stunum,cmp);
            stu[templocal].local_rank=1;
            for(int j=templocal+1;j<=stunum-1;j++)
            {
                if(stu[j].score==stu[j-1].score)
                    stu[j].local_rank=stu[j-1].local_rank;
                else
                    stu[j].local_rank=j-templocal+1;
            }
        }
        sort(stu,stu+stunum,cmp);
        stu[0].final_rank=1;
        for(int i=1;i<=stunum-1;i++)
        {
            if(stu[i].score==stu[i-1].score)
                stu[i].final_rank=stu[i-1].final_rank;
            else
                stu[i].final_rank=i+1;
        }
        printf("%d
    ",stunum);
        for(int i=0;i<=stunum-1;i++)
            printf("%s %d %d %d
    ",stu[i].id,stu[i].final_rank,stu[i].location,stu[i].local_rank);
        return 0;
    }
    View Code

    luogu P1706 全排列

    #include<stdio.h>
    int n,P[100],hashTable[100]={0};
    void generateP(int x){
        if(x==n+1)
        {
            for(int i=1;i<=n;i++)
                printf("%5d",P[i]);
            printf("
    ");
            return ;
        }
        for(int i=1;i<=n;i++)
        {
            if(hashTable[i]==0)
            {
                hashTable[i]=1;
                P[x]=i;
                generateP(x+1);
                hashTable[i]=0;
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        generateP(1);
        return 0;
    }
    View Code

     luogu P1219 n皇后

    #include<stdio.h>
    int n,P[100],hashTable[100]={0},left[100]={0},right[100]={0},ans=0;
    void generateP(int x)
    {
        if(x==n+1)
        {
            ans++;
            if(ans>3)
                return;
            for(int i=1;i<=n-1;i++)
            {
                printf("%d ",P[i]);
            }
            printf("%d
    ",P[n]);
            return;
        }
        for(int i=1;i<=n;i++)
        {
            if(hashTable[i]==0 && left[x-i+30]==0 && right[x+i]==0)
            {
                hashTable[i]=1;
                left[x-i+30]=1;
                right[x+i]=1;
                P[x]=i;
                generateP(x+1);
                hashTable[i]=0;
                left[x-i+30]=0;
                right[x+i]=0;
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        generateP(1);
        printf("%d",ans);
        return 0;
    }
    View Code

     PAT A1020 月饼

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    struct mooncake{
        double kc;
        double market;
        double per;
    }m[1005];
    bool cmp(mooncake a,mooncake b)
    {
        return a.per>b.per;
    }
    int main()
    {
        int n,d;
        double ans=0;
        scanf("%d %d",&n,&d);
        for(int i=1;i<=n;i++)
            scanf("%lf",&m[i].kc);
        for(int i=1;i<=n;i++)
        {
            scanf("%lf",&m[i].market);
            m[i].per=m[i].market/m[i].kc;
        }
        sort(m+1,m+1+n,cmp);
        int tempnow=1;
        while(d>0 && tempnow<=n)
        {
            if(m[tempnow].kc>d)
            {
                ans+=m[tempnow].per*d;
                break;
            }
            else
            {
                ans+=m[tempnow].market;
                d=d-m[tempnow].kc;
                tempnow++;
            }
        }
        printf("%.2f",ans);
        return 0;
    }
    View Code

     PAT A1023 组个最小数

    #include<stdio.h>
    int main()
    {
        int a[15];
        for(int i=0;i<=9;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=9;i++)
        {
            if(a[i]!=0)
            {
                a[i]--;
                printf("%d",i);
                break;
            }
        }
        for(int i=0;i<=9;i++)
        {
            while(a[i]!=0)
            {
                printf("%d",i);
                a[i]--;
            }
        }
        return 0;
    }
    View Code

     luogu P1226 快速幂

    注意 底数为0返回0不是1,各个数计算出现新乘法要mod,若底数比取余的数大,先a mod m,避免进去计算数值过大。能整除时,要先算出来结果再结果乘,不然部分函数会被多次调用

    #include<stdio.h>
    typedef long long LL;
    LL binaryPow(int a,int b,int m)
    {
        if(a==0)
            return 0;
        if(b==0)
            return 1;
        if(b==1)
            return a;
        if(b%2==0)
        {
            LL temp=binaryPow(a,b/2,m)%m;
            return (temp*temp)%m;
        }
        else
            return ((a*binaryPow(a,(b-1),m))%m);
        return 1;
    }
    int main()
    {
        int b,p,k;
        scanf("%d %d %d",&b,&p,&k);
        printf("%d^%d mod %d=%lld",b,p,k,binaryPow(b%k,p,k));
        return 0;
    }
    View Code

     归并排序

    注意,合并的过程还有复制的过程,两个的下标要同时进行改变哦

    #include<stdio.h>
    int a[100005],ans[100005];
    void merge(int A[],int l1,int r1,int l2,int r2){
        int temp1=l1,temp2=l2;
        int ansnum=0;
        while(temp1<=r1 && temp2<=r2){
            if(A[temp1]<=A[temp2]){
                ans[ansnum++]=A[temp1++];
            }
            else
                ans[ansnum++]=A[temp2++];
        }
        while(temp1<=r1)
            ans[ansnum++]=A[temp1++];
        while(temp2<=r2)
            ans[ansnum++]=A[temp2++];
        for(int i=0;i<=ansnum-1;i++)
            A[l1++]=ans[i];
    }
    void mergeSort(int A[],int left,int right){
        if(left>=right)
            return;
        int mid=(left+right)/2;
        mergeSort(A,left,mid);
        mergeSort(A,mid+1,right);
        merge(A,left,mid,mid+1,right);
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=0;i<=n-1;i++)
            scanf("%d",&a[i]);
        mergeSort(a,0,n-1);
        printf("%d",a[0]);
        for(int i=1;i<=n-1;i++)
            printf(" %d",a[i]);
        return 0;
    }
    View Code

     快速排序

    注意Partition最后要把最开始选定的值赋给A[left],另外没优化过的快速排序在luogu会TLE,归并不会

    俩指针往中间靠近的过程中,也要时刻判断不要越界

    #include<stdio.h>
    int a[100005];
    int Partition(int A[], int left, int right){
        int l=left,r=right;
        int temp=A[left];
        while(l<r){
            while(r>l && A[r]>=temp)
                r--;
            if(l!=r)
                A[l++]=A[r];
            while(r>l && A[l]<=temp)
                l++;
            if(l!=r)
                A[r--]=A[l];
        }
        A[l]=temp;
        return l;
    }
    void Partitionsort(int A[], int left, int right){
        if(left<right)
        {
            int pos=Partition(A,left,right);
            Partitionsort(A,left,pos-1);
            Partitionsort(A,pos+1,right);
        }
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=0;i<=n-1;i++)
            scanf("%d",&a[i]);
        Partitionsort(a,0,n-1);
        printf("%d",a[0]);
        for(int i=1;i<=n-1;i++)
            printf(" %d",a[i]);
        return 0;
    }
    View Code

     归并排序非递归

    step的选值,是要保证r1最后能够覆盖全部元素的,即r1=n-1,再加上step必偶数,-1可忽略

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int a[100005],ans[100005],n;
    void mergeNum(int A[],int l1,int r1,int l2,int r2){
        int temp1=l1,temp2=l2,ansnum=0;
        while(temp1<=r1 && temp2<=r2){
            if(A[temp1]<=A[temp2]){
                ans[ansnum++]=A[temp1++];
            }
            else
                ans[ansnum++]=A[temp2++];
        }
        while(temp1<=r1)
            ans[ansnum++]=A[temp1++];
        while(temp2<=r2)
            ans[ansnum++]=A[temp2++];
        for(int i=0;i<=ansnum-1;i++)
            A[l1++]=ans[i];
        return ;
    }
    void mergeSort(int A[], int left, int right){
        if(left>=right)
            return;
        int mid=(left+right)/2;
        mergeSort(A,left,mid);
        mergeSort(A,mid+1,right);
        mergeNum(A,left,mid,mid+1,right);
    }
    void mergeSort2(int A[], int left, int right){
        for(int step=2;step/2<=n-1;step=step*2)
        {
            int l1=left;
            while(l1<=n-1){
                int r1=(l1+l1+step-1)/2;
                int l2=r1+1;
                if(l2>n-1)
                    break;
                int r2=min(l1+step-1,n-1);
                mergeNum(A,l1,r1,l2,r2);
                l1=r2+1;
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<=n-1;i++)
            scanf("%d",&a[i]);
        mergeSort2(a,0,n-1);
        printf("%d",a[0]);
        for(int i=1;i<=n-1;i++)
            printf(" %d",a[i]);
        return 0;
    }
    View Code

     PAT B1040 有几个PAT

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        long long ans=0;
        char s[100005];
        scanf("%s",s);
        int p[100005]={0};
        int t[100005]={0};
        int len=strlen(s);
        if(s[0]=='P')
            p[0]=1;
        for(int i=1;i<len;i++)
        {
            if(s[i]=='P')
                p[i]=p[i-1]+1;
            else
                p[i]=p[i-1];
        }
        if (s[len-1]=='T')
            t[len-1]=1;
        for(int i=len-2;i>=0;i--)
        {
            if(s[i]=='T')
                t[i]=t[i+1]+1;
            else
                t[i]=t[i+1];
        }
        for(int i=0;i<=len-1;i++)
        {
            if(s[i]=='A')
            {
                    ans=ans+p[i]*t[i];
            }
        }
        printf("%lld",ans%1000000007);
        return 0;
    }
    View Code

     PAT A1060 Are They Equal

    • 整个过程都要注意是不是在字符长度内
    • 用string的话不要直接给下标对应位置赋值,用+拼接好一点
    • s.erase(pos,length),删除某个位置开始的长度为length的字符串
    • 注意特判0,因为去掉前导0以后有可能后面没数了
    • 如果string作为参数,那么要使用引用(不用引用会出错,和数组不一样哦),或者直接作为返回值,两种做法都写出来了
    • 整体思路:首先去掉前导0,之后,看是abcd.ef还是0.abcd这种的,分别进入判断,如果是前一种,那么找到.的位置,在找的过程中确定e,如果是后一种,看第一个非0有多少,来确定e
    #include<stdio.h>
    #include<iostream>
    #include<string>
    int n;
    using namespace std;
    /*string deal(string s,int &e){
        string ans="0.";
        e=0;
        while(s.length()!=0 && s[0]=='0')
            s.erase(s.begin());
        if(s.length()==0){
            e=0;
            for(int i=1;i<=n;i++)
                ans+='0';
            return ans;
        }
        if(s[0]=='.'){
            s.erase(s.begin());
            while(s.length()!=0 && s[0]=='0')
            {
                s.erase(s.begin());
                e--;
            }
            if(n<=s.length()){
                for(int i=1;i<=n;i++)
                    ans+=s[i-1];
            }
            else{
                for(int i=1;i<=s.length();i++)
                    ans+=s[i-1];
                for(int i=s.length()+1;i<=n;i++)
                    ans+='0';
            }
        }
        else{
            int temp=0;
            while(temp<=s.length()-1 && s[temp]!='.'){
                e++;
                temp++;
            }
            if(temp<=s.length()-1 && s[temp]=='.')
                s.erase(temp,1);
            if(n<=s.length())
            {
                for(int i=1;i<=n;i++)
                    ans+=s[i-1];
            }
            else{
                for(int i=1;i<=s.length();i++)
                    ans+=s[i-1];
                for(int i=s.length()+1;i<=n;i++)
                    ans+='0';
            }
        }
        return ans;
    }*/
    void deal(string s,int &e, string &ans){
        //string ans="0.";
        ans="0.";
        e=0;
        while(s.length()!=0 && s[0]=='0')
            s.erase(s.begin());
        if(s.length()==0){
            e=0;
            for(int i=1;i<=n;i++)
                ans+='0';
            return ;
        }
        if(s[0]=='.'){
            s.erase(s.begin());
            while(s.length()!=0 && s[0]=='0')
            {
                s.erase(s.begin());
                e--;
            }
            if(n<=s.length()){
                for(int i=1;i<=n;i++)
                    ans+=s[i-1];
            }
            else{
                for(int i=1;i<=s.length();i++)
                    ans+=s[i-1];
                for(int i=s.length()+1;i<=n;i++)
                    ans+='0';
            }
        }
        else{
            int temp=0;
            while(temp<=s.length()-1 && s[temp]!='.'){
                e++;
                temp++;
            }
            if(temp<=s.length()-1 && s[temp]=='.')
                s.erase(temp,1);
            if(n<=s.length())
            {
                for(int i=1;i<=n;i++)
                    ans+=s[i-1];
            }
            else{
                for(int i=1;i<=s.length();i++)
                    ans+=s[i-1];
                for(int i=s.length()+1;i<=n;i++)
                    ans+='0';
            }
        }
        return ;
    }
    int main()
    {
        string s1,s2,ans1,ans2;
        int e1,e2;
        int temp=1;
        cin>>n>>s1>>s2;
        //ans1=deal(s1,e1);
        //ans2=deal(s2,e2);
        deal(s1,e1,ans1);
        deal(s2,e2,ans2);
        if(ans1==ans2){
                cout<<"YES "<<ans1<<"*10^"<<e1;
        }
        else{
            cout<<"NO "<<ans1<<"*10^"<<e1<<" "<<ans2<<"*10^"<<e2;
        }
        return 0;
    }
    View Code

     codeup 1918 简单计算器

    • 先把中缀表达式转换成后缀表达式,再直接处理后缀表达式完成计算。
    • 中缀转后缀的处理办法:
      • 整个表达式首先以字符串的形式读入进来,getline(cin,str)可以连着空格一起读入,再借助迭代器it遍历一次,使用erase去掉空格
      • 使用一个栈来存储表达式中的符号,使用队列来存后缀表达式
      • 按顺序访问中缀表达式,如果遇到了数,直接加入后缀表达式中。
      • 如果遇到的是符号,跟操作符栈的栈顶比较一下,这个符号如果优先级比栈顶的高,那么压入栈中,如果低或者相同,弹出栈顶运算符,把它放到队列中,不断弹出直到它是优先级最高的运算符,压栈
      • 字符都处理完成以后,把栈里面的元素弹出,加入队列。
    • 后缀的处理方法:
      • 这里是用队列处理的,如果是数,压入栈,如果是符号,从栈中弹出来两个操作符,然后把结果压入栈中。
      • 全部处理结束以后,栈里面的那个数就是结果
    • 其它注意:
      • 多个输入数据的情况下,记得每次开始之前清空栈,因为栈会被处理后缀表达式队列的时候重复使用,肯定里面会有剩余的东西的
    • 关于拓展:这个是没有括号的版本,如果遇到有括号,那么左括号的优先级设置为最低(一个符号来的时候判断,如果栈顶优先级大于等于当前,那么栈顶进入后缀中),也就是,在遇到右括号之前其它的符号都可以进栈,一旦遇到右括号,弹出离它最近的左括号之间的所有符号,左右括号不需要写在后缀表达式里面,就是正确的运算顺序。
    #include<iostream>
    #include<stack>
    #include<queue>
    #include<string>
    #include<map>
    using namespace std;
    struct node{
        double num;
        char op;
        bool flag;//true是数 false是符
    };
    string str;
    stack<node>s;
    queue<node>q;
    map<char,int>op;
    void Change(){
        double num;
        node temp;
        for(int i=0;i<str.length();){
            if(str[i]>='0'&&str[i]<='9'){
                temp.flag=true;
                temp.num=str[i]-'0';
                i++;
                while(i<str.length() && str[i]>='0' && str[i]<='9'){
                    temp.num=temp.num*10+(str[i]-'0');
                    i++;
                }
                q.push(temp);
            }
            else{
                temp.flag=false;
                while(!s.empty() && op[str[i]]<=op[s.top().op]){
                    q.push(s.top());
                    s.pop();
                }
                temp.op=str[i];
                s.push(temp);
                i++;
            }
        }
        while(!s.empty()){
                q.push(s.top());
                s.pop();
        }
    }
    double Cal(){
        double ans,temp1,temp2;
        node cur,temp;
        while(!q.empty()){
            cur=q.front();
            q.pop();
            if(cur.flag==true){
                s.push(cur);
            }
            else{
                temp2=s.top().num;
                s.pop();
                temp1=s.top().num;
                s.pop();
                temp.flag=true;
                if(cur.op=='+'){
                    temp.num=temp1+temp2;
                }
                else if(cur.op=='-'){
                    temp.num=temp1-temp2;
                }
                else if(cur.op=='*'){
                    temp.num=temp1*temp2;
                }
                else temp.num=temp1/temp2;
                s.push(temp);
            }
        }
        return s.top().num;
    }
    int main(){
        op['+']=op['-']=1;
        op['*']=op['/']=2;
        while(getline(cin,str), str!="0"){
            for(string::iterator it=str.begin();it!=str.end();it++)
            {
                if(*it==' '){
                    str.erase(it);
                }
            }
            while(!s.empty())
                s.pop();
            Change();
            double ans=Cal();
            printf("%.2f
    ",ans);
        }
        return 0;
    }
    View Code

     PAT A1032

    • 这个题要用静态链表 给一个全都标记了以后,开始访问第二条链表,遇到的第一个就是结果。
    • 不能舍弃其它数据 只看最后一个点 然后遇到一样的就作为输出结果,因为实际数据中可能会出现:他们在中途相遇 然后分开 再相遇 这时候就会导致可能会把第二次相遇的那个位置作为结果输出出来。
    • PAT的题不能完全依照题目描述,要考虑,空点,无效点,多次交叉各类情况,尽量先思考要考到的知识点,再去想题目,自己想出来的简单方法很可能有问题。
    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    struct node{
        char data;
        int next;
        bool flag;
    }a[100010];
    int main(){
        int head1,head2,num;
        int temp1,temp2;
        char tempchar;
        int ans=-1;
        for(int i=0;i<100010;i++)
            a[i].flag=false;
        scanf("%d %d %d",&head1,&head2,&num);
        for(int i=1;i<=num;i++){
            scanf("%d %c %d",&temp1,&tempchar,&temp2);
            a[temp1].data=tempchar;
            a[temp1].next=temp2;
        }
        for(int i=head1;i!=-1;i=a[i].next){
            a[i].flag=true;
        }
        for(int i=head2;i!=-1;i=a[i].next){
            if(a[i].flag==true)
            {
                ans=i;
                break;
            }
        }
        if(ans==-1)
            printf("-1
    ");
        else
            printf("%05d
    ",ans);
        return 0;
    }
    View Code

     PAT A1052 

    • 给出来的点不一定都在链表中,要判断一下,不在的点不需要输出,在判断的过程中统计在里面的点的个数。最后输出的是在里面的(对应第二个测试点)
    • 特判,如果没有点在里面,要特殊输出 不然会越界(对应第五个测试点)
    • 这类题要考察的就是链表,所以肯定会有不在里面的和空的情况。解题注意。
    • 前面那个cmp 先判断temp1.flag==false return false 再判断temp2.flag==false return true也是可以的 但是倒过来会出错 不知道为什么。待补充。
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct node{
        int address;
        int data;
        int next;
        bool flag;
    }a[100010];
    bool cmp(node temp1,node temp2){
        /*if(temp2.flag==false)
            return true;
        if(temp1.flag==false)
            return false;*/
        if(temp1.flag==false||temp2.flag==false)
            return temp1.flag>temp2.flag;
        return temp1.data<temp2.data;
    }
    int main(){
        int num,head;
        int temp1,temp2,temp3;
        for(int i=0;i<100010;i++)
        {
            a[i].flag=false;
        }
        scanf("%d %d",&num,&head);
        for(int i=1;i<=num;i++){
            scanf("%d %d %d",&temp1,&temp2,&temp3);
            a[temp1].address=temp1;
            a[temp1].data=temp2;
            a[temp1].next=temp3;
            //a[temp1].flag=true;
        }
        int count=0;
        for(int i=head;i!=-1;i=a[i].next)
        {
            a[i].flag=true;
            count++;
        }
        if(count==0){
            printf("0 -1");
            return 0;
        }
        sort(a,a+100010,cmp);
        for(int i=0;i<count;i++){
            a[i].next=a[i+1].address;
        }
        a[count-1].next=-1;
        printf("%d %05d
    ",count,a[0].address);
        for(int i=0;i<count-1;i++)
            printf("%05d %d %05d
    ",a[i].address,a[i].data,a[i].next);
        printf("%05d %d -1
    ",a[count-1].address,a[count-1].data);
        return 0;
    }
    View Code
    时间才能证明一切,选好了就尽力去做吧!
  • 相关阅读:
    10-索引优化分析(2)
    09-索引优化分析(1)
    08-优化 SQL 步骤
    XHR 框架与 Dojo( xhrGet,xhrPut,xhrDelete)
    Win7窗口操作
    SQLServer游标详解
    Graham算法—二维点集VC++实现
    SQlserver表连接
    字符数组中将空格移到最后java实现
    笛卡儿积的java实现
  • 原文地址:https://www.cnblogs.com/tingxilin/p/14520164.html
Copyright © 2011-2022 走看看