• loj 1109


    一道题想了老半天,结果还是TLE了

    TLE:

    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    int compare(const void*a,const void*b)
    {
    return *(int*)a-*(int*)b;
    }
    int main()
    {
    int t,n,i,a[1001],b[1001];
    int j;
    cin>>t;
    int T=1;
    while(t--)
    {
    cin>>n;
    memset(a,0,sizeof(a));
    //memset(b,0,sizeof(b));
    for(i=1;i<=1000;i++)
    {
    for(j=1;j<=i;j++)
    {
    if(i%j==0)a[i]++;//a[i]用来看记录i有a[i]个除数;
    }
    b[i]=a[i];//保存未排序前的a[i]的数据;
    }
    qsort(a+1,1000,sizeof(int ),compare);
    cout<<"Case "<<T++<<": ";
    int l=1;
    int k=a[n];//记录a[n]的除数个数是k;
    for(i=n-1;i>=1;i--)
    {
    if(a[i]==k)l++;
    else break;
    }//用来计算这个a[n]是k中的第l个;
    for(i=1000;i>=1;i--)
    {
    if(b[i]==k)
    {
    l--;
    if(l==0)break;
    }
    }//用来求出这个第l个所对应的原始数据;
    cout<<i<<endl;
    }
    return 0;
    }

    最终在楼长的指导下,了解了结构体二级排序,AC了

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;

    struct num
    {
    int x;
    int y;
    }s[1004];
    int cmp(num a,num b)
    {

    if(a.x==b.x)
    return a.y>b.y;
    else
    return a.x<b.x;
    }
    int main()
    {
    int T,t=1;
    cin>>T;
    while(T--)
    {
    int n;
    cin>>n;
    for(int i=1;i<=1000;i++)
    {
    s[i].x=0;
    int m=sqrt(i);
    for(int j=1;j<=m;j++)//节省了不少时间;
    {
    if(i%j==0)
    {
    s[i].x++;
    if(i!=j*j)s[i].x++;
    }
    }
    s[i].y=i;
    }
    sort(s+1,s+1001,cmp);
    cout<<"Case "<<t++<<": "<<s[n].y<<endl;
    }
    return 0;
    }

  • 相关阅读:
    套接字I/O模型-WSAAsyncSelect
    套接字I/O模型-完成端口IOCP
    套接字I/O模型-WSAEventSelect(转载)
    Win7+VS2010环境下CEGUI 0.8.4编译过程详解
    数组去重统计排序
    计算当前月有几天
    前端开发仓库
    Jquery中bind(), live(), on(), delegate()四种注册事件的优缺点,建议使用on()
    图表那些事
    图标字体,矢量图标
  • 原文地址:https://www.cnblogs.com/wally/p/wally.html
Copyright © 2020-2023  润新知