【CF】Codeforces1301E_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(1\leq f\leq 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('\n'); }
void chu2(int cn, int cm,int cx) {if(!cn) return; glen++; Wr_n(cn); jc(' '); jc(z[cm]); jc(z[cx]); jc('\n'); }
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('\n'); }
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(); }

猜你喜欢

转载自www.cnblogs.com/czyarl/p/12332998.html
run