D. Time to Run构造
Posted orangeko
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D. Time to Run构造相关的知识,希望对你有一定的参考价值。
#include <bits/stdc++.h>
#define dbg(x) cout << #x << "=" << x << endl
#define eps 1e-8
#define pi acos(-1.0)
using namespace std;
typedef long long LL;
const int inf = 0x3f3f3f3f;
template<class T>inline void read(T &res)
{
char c;T flag=1;
while((c=getchar())<‘0‘||c>‘9‘)if(c==‘-‘)flag=-1;res=c-‘0‘;
while((c=getchar())>=‘0‘&&c<=‘9‘)res=res*10+c-‘0‘;res*=flag;
}
namespace _buff {
const size_t BUFF = 1 << 19;
char ibuf[BUFF], *ib = ibuf, *ie = ibuf;
char getc() {
if (ib == ie) {
ib = ibuf;
ie = ibuf + fread(ibuf, 1, BUFF, stdin);
}
return ib == ie ? -1 : *ib++;
}
}
int qread() {
using namespace _buff;
int ret = 0;
bool pos = true;
char c = getc();
for (; (c < ‘0‘ || c > ‘9‘) && c != ‘-‘; c = getc()) {
assert(~c);
}
if (c == ‘-‘) {
pos = false;
c = getc();
}
for (; c >= ‘0‘ && c <= ‘9‘; c = getc()) {
ret = (ret << 3) + (ret << 1) + (c ^ 48);
}
return pos ? ret : -ret;
}
int m, n, k;
map<string, int> mp;
vector<pair<int, string> > vec;
void write(string a) {
mp[a] = 0;
}
int main()
{
scanf("%d %d %d",&n, &m, &k);
if(4 * n * m - 2 * n - 2 * m < k) {
puts("NO");
return 0;
}
else {
puts("YES");
int cnt = 0;
for ( int i = 1; i <= m - 1; ++i ) {
if(cnt < k) {
++cnt;
mp["R"]++;
}
else {
break;
}
}
if(mp["R"]) {
vec.push_back(make_pair(mp["R"], "R"));
write("R");
}
for ( int i = 1; i <= m - 1; ++i ) {
if(cnt < k) {
++cnt;
mp["L"]++;
}
else {
break;
}
}
if(mp["L"]) {
vec.push_back(make_pair(mp["L"], "L"));
write("L");
}
for(int j = 1; j <= n - 1; ++j) {
if(cnt > k)
break;
for ( int i = 1; i <= m-2; ++i ) {
if(k - cnt > 3) {
mp["DRU"]++;
cnt += 3;
}
}
//dbg(k-cnt);
if(k - cnt >= 3 && m > 1) {
cnt += 3;
mp["DRU"]++;
//dbg(mp["DRU"]);
}
else {
if(m > 1) {
if(cnt < k) {
mp["D"]++;
cnt++;
vec.push_back(make_pair(mp["D"], "D"));
write("D");
}
if(cnt < k) {
mp["R"]++;
cnt++;
vec.push_back(make_pair(mp["R"], "R"));
write("R");
}
}
}
if(mp["DRU"]) {
vec.push_back(make_pair(mp["DRU"], "DRU"));
write("DRU");
}
if(cnt < k) {
mp["D"]++;
cnt++;
vec.push_back(make_pair(mp["D"], "D"));
write("D");
}
for ( int i = 1; i <= m - 1; ++i ) {
if(cnt < k) {
mp["L"]++;
cnt++;
}
else {
break;
}
}
if(mp["L"] != 0) {
vec.push_back(make_pair(mp["L"], "L"));
write("L");
}
}
for ( int i = 1; i <= n-1; ++i ) {
if(cnt < k) {
++cnt;
mp["U"]++;
}
}
if(mp["U"]) {
vec.push_back(make_pair(mp["U"], "U"));
}
int d = vec.size();
printf("%d
",d);
for ( int i = 0; i < d; ++i ) {
cout << vec[i].first << " " << vec[i].second << endl;
}
}
return 0;
}
以上是关于D. Time to Run构造的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu16.04 yum报错:There are no enabled repos. Run “yum repolist all“ to see the repos you have.(代码片段
javascript 如果浏览器JS API支持,则此片段将Time to First Paint,Connection type和Speed发送到第一个网络跃点。脚本s
关于eclipse 提示no consoles to display at this time的问题
Codeforces 1099 D. Sum in the tree-构造最小点权和有根树 贪心+DFS(Codeforces Round #530 (Div. 2))