• CCF CSP 201803-2 碰撞的小球



    因为每个球最终的相对位置的序号是不变的
    而且碰撞可以看成穿过,所以直接可以计算所有的最终位置
    和树上的蚂蚁这题很像

    
    #include <bits/stdc++.h> 
    
    
    using namespace std;
    
    int main(int argc, char** argv) {
    	int n,L,t;
    	
    	cin>>n>>L>>t;
    	
    	vector<pair<int, int> > b(n);  //用来定位第i个小球的位置 
    	vector<int> a(n);  //  结果位置的数组 
    	vector<int> ans(n);  // 用来记录第i个小球的相对位置是哪个 
    
    	int sum = 0;
    	
    	for(int i=0; i<n; i++){  //输入数据 
    		
    		cin>>a[i];
    		b[i]=make_pair(a[i],i);
    		
    		  
    		sum = (a[i]+t)/(L);  // 求走了整个尺子几次 
    		int rem = (a[i]+t)%(L);  //   没有完整的走下来的剩余的步数 
    		
    		if(sum&1)  // 如果走过整个尺子是奇数次,那么相当于剩下的是在从L往回走 
    			a[i]=L-rem;
    		else  // 反之,就是在从0往L这个方向走 
    			a[i]=rem;
    	}
    	
    	sort(b.begin(), b.end());   // 这样是为了按照起步位置排序,然后确定第i个点出发的相对是第几号 
    	sort(a.begin(), a.end());   //  最左起步的点还是最左的位置,所以最终位置要排序 
    	
    	for(int i=0; i<n; i++){  // ans[i] 表示的是第i个人是第几个起步的 
    		ans[b[i].second] = i;
    	}
    	for(int i=0; i<n; i++){ // a[i]存着第i个起步的人的最终位置, 所以a[ans[i]] 就是第i个人的最终位置 
    		cout<<a[ans[i]]<<" ";
    	}
    	return 0;
    }
    
  • 相关阅读:
    P1966 火柴排队
    其实,我可以假装这篇随笔的名字很长,很长
    通用技术课的准备
    浅谈高压线除冰技术
    浅谈发电厂的环保问题
    本地MD搬运
    高考作文专题
    奇奇怪怪的错误收集 (鸽)
    2019CSP-S2专题
    模拟赛 ——“与” 小象涂色 行动!行动!
  • 原文地址:https://www.cnblogs.com/Crossea/p/13634948.html
Copyright © 2020-2023  润新知