2 条题解

  • 0
    @ 2026-5-18 19:25:12

    思路:

    考虑暴力模拟,判环的话就是记 SiS_i 为第 ii 个位置下一步跳到的位置的集合,如果下一步要跳到的位置为 xx,若 xSix \in S_i,则之前进行过这样的操作,就重复了,退出即可。

    时间复杂度为 O(NlogN)O(N \log N)

    完整代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef double db;
    const ll N=100100;
    inline ll read(){
        ll x=0,f=1;
        char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')
              f=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9'){
            x=(x<<1)+(x<<3)+(c^48);
            c=getchar();
        }
        return x*f;
    }
    inline void write(ll x){
    	if(x<0){
    		putchar('-');
    		x=-x;
    	}
    	if(x>9)
    	  write(x/10);
    	putchar(x%10+'0');
    }
    ll n,s,p=1,t=1,ans;
    struct Node{
    	ll op;
    	ll x,f;
    }a[N];
    set<ll> S[N];
    int main(){
    	n=read(),s=read();
    	for(int i=1;i<=n;i++)
    	  a[i]={read(),read(),0};
    	while(s>=1&&s<=n){
    //		cout<<a[s].f<<'\n';
    		if(!a[s].op){
    			t*=(-1);
    			p+=a[s].x;
    		}
    		else{
    			if(p>=a[s].x&&!a[s].f){
    //				cout<<s<<'\n';
    				ans++;
    				a[s].f=1;
    			}
    		}
    		if(S[s].count(s+p*t))
    		  break;
    		S[s].insert(s+p*t);
    		s+=p*t;
    	}
    	write(ans);
    	return 0;
    }
    
    
    • 0
      @ 2025-10-8 17:13:47
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e5+10;
      int n,m,a[N],b[N];
      int res=1,f=1,ans;
      int main()
      {
          int n,p;scanf("%d%d",&n,&p);
          for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
      
          int res=1,f=1,ans=0,t=0;
          while(1<=p && p<=n)
          {
              if(a[p]==1)
              {
                  if(b[p]<=res){ a[p]=-1;ans++;}
              }
              else if(a[p]==0)
              {
                  res+=b[p];
                  f=-f;
              }
              p+=res*f;
              t++;if(t>1000000)break;
          }
          printf("%d",ans);
          return 0;
      }
      
      • 1

      *【模拟】在数轴上弹跳[USACO24JAN] Cannonball B

      信息

      ID
      7503
      时间
      2000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      170
      已通过
      25
      上传者