或为本题最短代码
查看原帖
或为本题最短代码
477036
ParseY_Pasy楼主2021/10/7 17:56

(都是扣byte写出来的,所以有些地方不会和一般风格相同)

代码如下(共349byte),已尽可能压行

#include <iostream>
std::string w="2011012010012010012111002";
int A[200],B[200],N,c,d,a,b;
int main(){
    std::cin>>N>>c>>d;
    for(int i=0;i<c;i++)std::cin>>A[i];
    for(int i=0;i<d;i++)std::cin>>B[i];
    for(int i=0;i<N;i++){
        char e=w[A[i%c]*5+B[i%d]];
        a+=e=='1';b+=e=='0';}
    std::cout<<a<<" "<<b;
    return 0;}

对于w字符串,这是输赢状态的表示,运用string外加简单的运算就可以和普通矩阵一样访问输赢状态,这可以省掉24个byte的逗号,10个引号,5个格式符(没想到吧233

std::共计5个,比原先的

using namespace std;

少2个byte!所以再见using(bushi

然后看向循环部分

用取模来表示循环,这没什么好说的

但是注意到更新可以直接使用判断表达式,而且bool可以让编译器自动转换为int,所以又省了很多,此处+=的优先级比==要低,所以不用加括号,比原先的:

if(e=='1')
	a++;
else if(e=='0')
	b++;

要少14个byte!

这没什么可以用算法压的地方,最多各位在排版上忽略任何要求,变成这样:

#include <iostream>
std::string w="2011012010012010012111002";
int A[200],B[200],N,c,d,a,b;
int main(){std::cin>>N>>c>>d;for(int i=0;i<c;i++)std::cin>>A[i];for(int i=0;i<d;i++)std::cin>>B[i];for(int i=0;i<N;i++){char e=w[A[i%c]*5+B[i%d]];a+=e=='1';b+=e=='0';}std::cout<<a<<" "<<b;return 0;}

293byte,不能再少了。 当然如果各位有更好的方法请提醒我,我会尽快修改

2021/10/7 17:56
加载中...