【CF】Codeforces1301D_Time to run

题面

Codeforces1301E

题解

  • 这道题做法很多。也不难。
  • 只要你能想到如何把他密铺就行了。
  • 我的想法是D(n-1),U(n-1),(LDR(n-1),R1,U(n-1))(m-1),L*(m-1)。
  • 简直完美
  • 只是,出事情了。题目中有这么一句话: print an integer (f(1leq fleq 10^9)),但是我输出了0。

代码

#include<bits/stdc++.h>
#define LL long long
#define MAXN 1000000
using namespace std;
template<typename T>void Read(T &cn)
{
	char c;int sig = 1;
	while(!isdigit(c = getchar()))if(c == '-')sig = -1; cn = c-48;
	while(isdigit(c = getchar()))cn = cn*10+c-48; cn*=sig;
}
template<typename T>void Write(T cn)
{
	if(cn < 0) {putchar('-'); cn = 0-cn; }
	int wei = 0; T cm = 0; int cx = cn%10; cn/=10;
	while(cn)cm = cm*10+cn%10,cn/=10,wei++;
	while(wei--)putchar(cm%10+48),cm/=10;
	putchar(cx+48);
}
int z[4] = {'U', 'D', 'L', 'R'};
int n,m,k;
char c[MAXN+1];
int clen, glen;
void kong() {clen = glen = 0; }
void rel() {Write(glen); puts(""); for(int i = 1;i<=clen;i++) putchar(c[i]); }
void jc(char cn) {c[++clen] = cn; }
void Wr_n(int cn) 
{
	if(cn < 0) {jc('-'); cn = 0-cn; }
	int wei = 0; int cm = 0; int cx = cn%10; cn/=10;
	while(cn)cm = cm*10+cn%10,cn/=10,wei++;
	while(wei--)jc(cm%10+48),cm/=10;
	jc(cx+48);	
}
void chu1(int cn, int cm) {if(!cn) return; glen++; Wr_n(cn); jc(' '); jc(z[cm]); jc('
'); }
void chu2(int cn, int cm,int cx) {if(!cn) return; glen++; Wr_n(cn); jc(' '); jc(z[cm]); jc(z[cx]); jc('
'); }
void chu3(int cn, int cm,int cx,int cy) {if(!cn) return; glen++; Wr_n(cn); jc(' '); jc(z[cm]); jc(z[cx]); jc(z[cy]); jc('
'); }
int zou1(int cn, int cm)
{
	if(cm >= k) {
		chu1(k,cn); k -= k;
		return 1;
	}
	chu1(cm,cn); k -= cm;
	return 0;
}
int zou3(int cn1, int cn2, int cn3, int cm)
{
	if(cm*3 < k) {
		chu3(cm,cn1,cn2,cn3); k -= cm*3;
		return 0;
	}
	int ge = k/3; k = k%3;
	chu3(ge,cn1,cn2,cn3);
	if(k == 0) return 1;
	if(k == 1) {chu1(1,cn1); return 1; }
	if(k == 2) {chu2(1,cn1,cn2); return 1; }
}
int main1()
{
	Read(n); Read(m); Read(k);
	if((n-1)*m*2 + n*(m-1)*2 < k) {puts("NO"); return 1; }
	puts("YES");
	if(n > m) {swap(z[0], z[2]); swap(z[1], z[3]); swap(n, m); }
	kong();
	if(n == 1) {
		if(k <= m-1) {
			chu1(k,3);
			return 0;
		}
		else {
			chu1(m-1,3);
			chu1(k-m+1,2);
			return 0;
		}
	}
	if(zou1(3,m-1)) return 0;
	if(zou1(2,m-1)) return 0;
	for(int i = 2;i<=n;i++)
	{
		if(zou3(1,3,0,m-1)) return 0;
		if(zou1(1,1)) return 0;
		if(zou1(2,m-1)) return 0;
	}
	if(zou1(0,n-1)) return 0;
	return 0;
}
int main() {if(!main1()) rel(); }
原文地址:https://www.cnblogs.com/czyarl/p/12332998.html