2 条题解

  • 0
    @ 2025-10-8 16:54:30

    60分超时:

    #include<bits/stdc++.h>
    using namespace std;
    bool v[110000];
    int main()
    {
        int n,m;scanf("%d%d",&n,&m);
        memset(v,0,sizeof(v));
        int t=n,i=1,mi=0;
        while(t>1)
        {
            if(v[i]==0)
            {
                mi++;
                if(mi==m){mi=0;v[i]=1;t--;m=i;} 
            }
    		i=i%n+1;
        }
        for(int i=1;i<=n;i++)if(v[i]==0){printf("%d\n",i); break;}
        return 0;
    }
    

    80分代码(链表实现):

    #include<bits/stdc++.h>
    using namespace std;
    struct node{int pre,next;}a[110000];
    int main()
    {
        int n,m;scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            a[i].pre =i-1;
    		a[i].next=i+1;
        }
    	a[1].pre=n;a[n].next=1;
    	int p=1;
        while(n>1)
        {
            for(int i=2;i<=m;i++)p=a[p].next;
            m=p;
            int pre=a[p].pre;
    		int next=a[p].next;
    		a[pre].next=next;
    		a[next].pre=pre;
    		p=next;
    		n--;
        }
    	printf("%d",p);
    	return 0;
    }
    

    100分代码(链表实现+一点小优化):

    #include<bits/stdc++.h>
    using namespace std;
    struct node{int pre,next;}a[110000];
    int main()
    {
        int n,m;scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            a[i].pre =i-1;
            a[i].next=i+1;
        }
        a[1].pre=n;a[n].next=1;
        int p=1;
        while(n>1)
        {
            if(m<n/2)for(int i=2;i<=m;i++)  p=a[p].next;
            else     for(int i=1;i<=n-m+1;i++)p=a[p].pre;
            n--;m=p%n;if(m==0)m=n;
            int pre=a[p].pre;
            int next=a[p].next;
            a[pre].next=next;
            a[next].pre=pre;
            p=next;
        }
        printf("%d\n",p);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:54:11

      60分超时:

      #include<bits/stdc++.h>
      using namespace std;
      bool v[110000];
      int main()
      {
      int n,m;scanf("%d%d",&n,&m);
      memset(v,0,sizeof(v));
      int t=n,i=1,mi=0;
      while(t>1)
      {
      if(v[i]0)
      {
      mi++;
      if(mim){mi=0;v[i]=1;t--;m=i;}
      }
      i=i%n+1;
      }
      for(int i=1;i<=n;i++)if(v[i]==0){printf("%d\n",i); break;}
      return 0;
      }

      80分代码(链表实现):

      #include<bits/stdc++.h>
      using namespace std;
      struct node{int pre,next;}a[110000];
      int main()
      {
      int n,m;scanf("%d%d",&n,&m);
      for(int i=1;i<=n;i++)
      {
      a[i].pre =i-1;
      a[i].next=i+1;
      }
      a[1].pre=n;a[n].next=1;
      int p=1;
      while(n>1)
      {
      for(int i=2;i<=m;i++)p=a[p].next;
      m=p;
      int pre=a[p].pre;
      int next=a[p].next;
      a[pre].next=next;
      a[next].pre=pre;
      p=next;
      n--;
      }
      printf("%d",p);
      return 0;
      }

      100分代码(链表实现+一点小优化):
      #include<bits/stdc++.h>
      using namespace std;
      struct node{int pre,next;}a[110000];
      int main()
      {
      int n,m;scanf("%d%d",&n,&m);
      for(int i=1;i<=n;i++)
      {
      a[i].pre =i-1;
      a[i].next=i+1;
      }
      a[1].pre=n;a[n].next=1;
      int p=1;
      while(n>1)
      {
      if(m<n/2)for(int i=2;i<=m;i++)  p=a[p].next;
      else     for(int i=1;i<=n-m+1;i++)p=a[p].pre;
      //printf("%d ",p);
      n--;
      m=p%n;if(m==0)m=n;
      int pre=a[p].pre;
      int next=a[p].next;
      a[pre].next=next;
      a[next].pre=pre;
      p=next;
      }
      printf("%d\n",p);
      return 0;
      }

      • 1

      信息

      ID
      853
      时间
      5000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      93
      已通过
      28
      上传者