1. 程式人生 > >CCF CSP 201803-2 碰撞的小球(Java-100分)

CCF CSP 201803-2 碰撞的小球(Java-100分)

問題描述
試題編號: 201803-2
試題名稱: 碰撞的小球
時間限制: 1.0s
記憶體限制: 256.0MB
問題描述: 問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。
  當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小。
  當兩個小球撞到一起的時候,兩個小球會分別向與自己原來移動的方向相反的方向,以原來的速度大小繼續移動。
  現在,告訴你線段的長度L,小球數量n,以及n個小球的初始位置,請你計算t秒之後,各個小球的位置。
提示   因為所有小球的初始位置都為偶數,而且線段的長度為偶數,可以證明,不會有三個小球同時相撞,小球到達線段端點以及小球之間的碰撞時刻均為整數。
  同時也可以證明兩個小球發生碰撞的位置一定是整數(但不一定是偶數)。
輸入格式   輸入的第一行包含三個整數n, L, t,用空格分隔,分別表示小球的個數、線段長度和你需要計算t秒之後小球的位置。
  第二行包含n個整數a1, a2, …, an,用空格分隔,表示初始時刻n個小球的位置。
輸出格式   輸出一行包含n個整數,用空格分隔,第i個整數代表初始時刻位於ai的小球,在t秒之後的位置。 樣例輸入 3 10 5
4 6 8
樣例輸出 7 9 9
樣例說明   初始時,三個小球的位置分別為4, 6, 8。

  一秒後,三個小球的位置分別為5, 7, 9。

  兩秒後,第三個小球碰到牆壁,速度反向,三個小球位置分別為6, 8, 10。

  三秒後,第二個小球與第三個小球在位置9發生碰撞,速度反向(注意碰撞位置不一定為偶數),三個小球位置分別為7, 9, 9。

  四秒後,第一個小球與第二個小球在位置8發生碰撞,速度反向,第三個小球碰到牆壁,速度反向,三個小球位置分別為8, 8, 10。

  五秒後,三個小球的位置分別為7, 9, 9。
樣例輸入 10 22 30
14 12 16 6 10 2 8 20 18 4
樣例輸出 6 6 8 2 4 0 4 12 10 2
資料規模和約定   對於所有評測用例,1 ≤ n ≤ 100,1 ≤ t ≤ 100,2 ≤ L ≤ 1000,0 < ai < L。L為偶數。
  保證所有小球的初始位置互不相同且均為偶數。
import java.util.Scanner;

public class Main {
	static Ball[] ball = null;
	static int time = 0; // 計時(從0開始)

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int L = sc.nextInt();
		int t = sc.nextInt();

		ball = new Ball[n];

		for (int i = 0; i < n; i++) {// 例項化
			ball[i] = new Ball(sc.nextInt(), 1);
		}

		go(n, L, t);// 核心處理過程

		for (int i = 0; i < n; i++) { // 輸出
			if (i == n - 1)
				System.out.print(ball[i].pos);
			else
				System.out.print(ball[i].pos + " ");
		}

		sc.close();
	}

	/**
	 * 模擬執行過程
	 * 
	 * @param n
	 * @param L
	 * @param t
	 */
	public static void go(int n, int L, int t) {
		while (++time <= t) {
			for (int i = 0; i < n; i++) {// 到達端點後反向
				if (ball[i].dir == 1) {
					ball[i].pos++;
					if (ball[i].pos == L)
						ball[i].dir *= -1; // 使球反向
				} else {
					ball[i].pos--;
					if (ball[i].pos == 0)
						ball[i].dir *= -1;
				}
			}
			for (int i = 0; i < n - 1; i++) {// 檢查是否相撞
				for (int j = i + 1; j < n; j++) {
					if (ball[i].pos == ball[j].pos) {
						ball[i].dir *= -1;
						ball[j].dir *= -1;
						break;
					}
				}
			}
		}
	}
}

class Ball {
	public int pos; // 球的位置
	public int dir; // 球的方向,1表示向右,-1表示向左

	public Ball(int p, int d) {
		this.pos = p;
		this.dir = d;
	}
}


相關推薦

CCF CSP 201803-2 碰撞小球Java-100

問題描述 試題編號: 201803-2 試題名稱: 碰撞的小球 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,

CCF-CSP-201803-2 碰撞小球

問題描述: 試題編號: 201803-2 試題名稱: 碰撞的小球 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L

CCF CSP 201709-2 公共鑰匙盒Java-100

問題描述   有一個學校的老師共用N個教室,按照規定,所有的鑰匙都必須放在公共鑰匙盒裡,老師不能帶鑰匙回家。每次老師上課前,都從公共鑰匙盒裡找到自己上課的教室的鑰匙去開門,上完課後,再將鑰匙放回到鑰匙盒中。   鑰匙盒一共有N個掛鉤,從左到右排成一排,用來掛N個教室的鑰匙。

CCF認證201803-2 碰撞小球 java程式碼實現。

問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小。   當兩個小

CCF認證 201803-2 碰撞小球 Python

問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小

csp 201803-2 碰撞小球

題目 問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速

CCF認證201803-2碰撞小球

問題描述 試題編號: 201803-2 試題名稱: 碰撞的小球 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標

[CSP]201712-2 遊戲 暴力+以此為例約瑟夫環的遞推

愚蠢的看錯題了。中文讀題能力還不如英文,有待提升。 所以這道題用普通的陣列模擬操作就可以了。總之跟暴力模擬的約瑟夫環沒什麼區別。 可以用next陣列模擬指標做資料結構,但是資料範圍不大的情況下不建議這麼寫,維護一個指標環寫起來還是比較麻煩的。 #include <

CSP201509-4(高速公路)Java 90

問題描述   某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由於經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路。   現在,大臣們幫國王擬了一個修高速公路的計劃。看了計劃後,國王發現,有些城市之間可以通過高速公路直接(不經過其他城市)或

CSP201409-2(畫圖Java 100

問題描述  在一個定義了直角座標系的紙上,畫一個(x1,y1)到(x2,y2)的矩形指將橫座標範圍從x1到x2,縱座標範圍從y1到y2之間的區域塗上顏色。   下圖給出了一個畫了兩個矩形的例子。第一個矩形是(1,1) 到(4, 4),用綠色和紫色表示。第二個矩形是(2, 3)到(6,

CCF 201712-4】行車路線Dijkstra 80

忽略一個條件:可能具有連續的小路,跑一邊裸的迪傑斯特拉演算法,即可拿到80分 注意:邊權可能會爆int,採用long long才可以 #include <iostream> #i

CCF 201709-4】通訊網路Warshall 65

思路 用warshall演算法求傳遞閉包,之後遍歷鄰接矩陣計算有幾個部門能夠訪問到N個部門 O(n^3),顯然超時,但是程式碼量短,水一點分數還是很值的。 Warshall有兩個版本,其中第一

ccf csp考試201803-2碰撞小球答案python實現

ccfcsp考試201803-2碰撞的小球答案(python實現) n,L,t = list(map(int,input().split())) positions=list(map(int,input().split())) speed = [] for i

201803-2 CCF-CSP模擬試題 碰撞小球

import java.util.Scanner; public class Main { public static void main(String[] args){ int[] pos = new int[100]; int i

CCF Python題解(100)201803-2 碰撞小球

CCF Python題解(100分)201803-2 碰撞的小球 from collections import defaultdict n, L, t = map(int,input().split()) positions = map(int,input().split()) li

CCF 201803-2 碰撞小球-Python版

問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小

CCF 201803-2 碰撞小球

剛開始挺沒有思路的,後來在網上看了別人的程式碼,學習了,原作者看到了聯絡我,侵刪。 思路:小球的位置和方向分別用兩個陣列表示,方向向右為正,向左為負,每秒小球位置的變化可用 a[i]+=b[i](陣列a表示小球的位置,陣列b表示小球運動的方向),到達兩端後

CCF 201803-2碰撞小球【模擬題】

問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小

ccf-csp 201803 第二題碰撞小球

問題描述   數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。   當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移

CCF Python題庫201803-2碰撞小球

問題描述 試題編號:201803-2 試題名稱:碰撞的小球 時間限制:1.0s 記憶體限制:256.0MB 問題描述:問題描述  數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在