Skip to content

Instantly share code, notes, and snippets.

@completejavascript
Created September 15, 2018 06:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save completejavascript/64209abd6d4a6290a03cb6c5b307afa7 to your computer and use it in GitHub Desktop.
Save completejavascript/64209abd6d4a6290a03cb6c5b307afa7 to your computer and use it in GitHub Desktop.
#include<iostream>
using namespace std;
typedef unsigned long long ull;
const ull MAX = 300005;
ull N, K;
ull remember;
char Str[MAX]; // Lưu xâu đầu vào
/*
* Lấy ra số nhỏ nhất của một đường chéo thứ i
* Đường chéo thứ i là đường chéo có tổng chỉ số hàng và cột
* của mỗi ô là bằng i.
* @PARAM : i : chỉ số của đường chéo
* RETURN : giá trị số nhỏ nhất của đường chéo đó.
*/
ull GetMinDiagon(ull i)
{
if(i < N) return (1 + (i*(i+1))/2);
return (((3*N - i)*(i - N + 1))/2 + remember);
}
ull GetValue(ull row, ull col)
{
// Tỉnh tổng chỉ số hàng và cột để suy ra chỉ số đường chéo
ull sum = row + col;
// Tính số nhỏ nhất của đường chéo đó.
ull min_diagon = GetMinDiagon(sum);
// chỉ số đường chéo là chẵn
if(sum%2 == 0 && sum < N)
{
return min_diagon + col;
}
else if(sum%2 == 0 && sum >= N)
{
ull col_start = sum - (N-1);
return min_diagon + (col - col_start);
}
// Chỉ số đường chéo là lẻ
else if(sum%2 == 1 && sum < N)
{
return min_diagon + (sum - col);
}
else if(sum%2 == 1 && sum >= N)
{
return min_diagon + (N-1) - col;
}
}
int main()
{
freopen("input.txt","r",stdin);
ios::sync_with_stdio(false);
cin >> N >> K >> Str;
remember = GetMinDiagon(N-1);
// Khởi tạo vị trí ban đầu là [0][0] và tổng là 1
ull row = 0, col = 0;
ull sum = 1;
// Duyệt từng kí tự để xác định cách nhảy của thỏ
for(int i = 0; i < K; i++)
{
if(Str[i] == 'U') row -= 1;
else if(Str[i] == 'D') row += 1;
else if(Str[i] == 'R') col += 1;
else if(Str[i] == 'L') col -= 1;
// Cộng dồn các ô mà thỏ nhảy tới.
sum += GetValue(row, col);
}
// In kết quả
cout << sum << endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment