Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Kiến hành quân (ver2)

  1. #1
    Ngày gia nhập
    06 2018
    Bài viết
    4

    Mặc định Kiến hành quân (ver2)

    Có 2 đàn kiến di chuyển rất có quy củ. Nhận thấy rằng, khi hai đàn kiến di chuyển ngược chiều và đâm vào nhau, chúng sẽ nhảy qua con đối diện một cách rất quy củ. Ở một đơn vị thời gian, nếu con kiến của đàn 1 đứng đối diện con của đàn 2, chúng sẽ hoán đổi vị trí cho nhau. Trong một đơn vị thời gian thì các sự hoán đổi sẽ xảy ra đồng thời. Hỏi ở thời điểm t thì thứ tự các con kiến trong 2 đàn sẽ như thế nào.

    IN : m, n, t là độ dài đàn kiến 1, đàn kiến 2 và thời điểm cần tính biết thời điểm.
    Dòng 2 là 1 string kí tự mô tả đàn kiến 1.
    Dòng 3 là 1 string kí tự mô tả đàn kiến 2.
    *Con kiến đầu đàn luôn là chữ cái đứng đầu trong string. Mỗi con kiến là một ký tự thường trong bảng chữ cái tiếng Anh. Thời điểm 2 con đầu gặp nhau là 0.

    OUT : 1 string mô tả 2 đàn kiến.

    Đây là code mình đã thử, tuy nhiên còn rườm rà và chạy rất lâu, mong chỉ giáo thêm :(
    Code:
    #include<bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
    	int m , n , t;
    	string kien1,kien2,kien3,kien4;
    	char swap;
    	while(cin>>m>>n>>t>>kien1>>kien2) {
    	int ddc1, i = 0, ii = 1, swapmax = 0, chinh, chinh2,jj = 0,x = 1,k = 1,j = 1;
    	//neu tgian > do dai kien thi co the xay ra "kien nam trong kien"
    	if (m < t)
    		{swapmax = m;}
    	// do dai chuoi kien 1
    	ddc1 = m - 1;
    	// dao chuoi kien 1
    	while(i<=ddc1)
    	{
    		swap = kien1.at(i);
    		kien1.at(i) = kien1.at(ddc1);
    		kien1.at(ddc1) = swap;
    		i++;
    		ddc1--;
    	}
    	kien3 = kien1 + kien2;
    	// chon vi tri bat dau de swap
    	chinh = m;
    	chinh2 = m;
    	if (t == 0)
    	cout<<kien3<<endl;
            else if (t >= m + n - 1)
           {kien4 = kien2 + kien1;
    	cout<<kien4<<endl;}
    	else {
    		// TH nay la neu t vuot qua so luong swap co the thi quy ve so luong swap nhieu nhat
    		if (t >= m + n)
    		{t = m + n - 1;}
    		for (j = 1; j <= t; j++)
    		{
    			//neu co swapmax va tgian > swapmax thi tu gio tro di chi co the swap duoc so swapmax lan (toi da)
    			if (swapmax != 0 && swapmax < j)
    			jj = swapmax;
    			//neu co swapmax va tgian <= swapmax thi tuc la so con kien co the swap duoc chua den toi da
    			else if (swapmax != 0 && swapmax >= j)
    			jj++;
    			// ko co swapmax, tuc la kien se xen vao nhau, ko nam trong nhau
    			else if (swapmax == 0)
    			jj++;
    			for (int ij = 1; ij <= jj; ij++)
    			{
    				//trong TH ma vi tri vuot qua do dai chuoi 3 thi phai dua tro lai vi tri trong chuoi
    				//day la THDB vi luc do chuoi kien 1 da co 1 con den cuoi, so lan swap se giam dan
    				if (chinh >= m + n)
    				{chinh = chinh - 2*x;
    				jj = jj - k;
    				x++;
    				k++;}
    				// bat dau swap
    				swap = kien3.at(chinh);
    				kien3.at(chinh) = kien3.at(chinh-1);
    				kien3.at(chinh-1) = swap;
    				// tru 2 de den vi tri swap tiep theo
    				if (j - ij > 0)
    				chinh = chinh - 2;
    			}
    			// vi tri con kien len 1 don vi
    			chinh = chinh2 + ii;
    			ii++;
    		}
    	cout<<kien3<<endl;}}
    }
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		P_20180705_124523.jpg
Lần xem:	6
Size:		84.8 KB
ID:		62872
    Đã được chỉnh sửa lần cuối bởi LeonSKennedy : 06-07-2018 lúc 01:56 PM.

  2. #2
    Ngày gia nhập
    06 2018
    Bài viết
    4

    Update code #1. Giờ code lại sử dụng ngốn rất nhiều dữ liệu (>256MB) rồi, mong các anh chị xem qua.

  3. #3
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    495

    Cho một chuỗi trên bảng chữ cái {a,b}. Không dùng chuỗi phụ, hãy thay thế [đồng thời] mọi chuỗi con có giá trị ab bằng chuỗi con mới với giá trị ba.
    Đã được chỉnh sửa lần cuối bởi Ada : 06-07-2018 lúc 03:24 PM.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn