• A1128 | 逻辑想象能力、简洁高效美观的代码、memset的使用情景


    写了三遍才AC,这真是对智商极大的侮辱

    C++代码:

    #include <stdio.h>
    #include <memory.h>
    #include <math.h>
    #include <string>
    #include <vector>
    #include <set>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <map>
    
    
    #define I scanf
    #define OL puts
    #define O printf
    #define F(a,b,c) for(a=b;a<c;a++)
    #define FF(a,b) for(a=0;a<b;a++)
    #define FG(a,b) for(a=b-1;a>=0;a--)
    #define LEN 10000
    #define MAX 0x06FFFFFF
    #define V vector<int>
    
    using namespace std;
    
    int C[3][LEN];//col, diag1, diag2
    
    int main(){
    //    freopen("d:/input/A1128.txt","r",stdin);
        int i,n,m;
        scanf("%d",&n);
        while(n-->0){
            scanf("%d",&m);
            memset(C,0,sizeof(C));
            bool ok=1;
            F(i,1,m+1){
                int r=i;
                int c;
                scanf("%d",&c);
                int d1=r-c+m;
                int d2=c-r+m;
                if(!ok) continue;
                if(C[0][c] || C[1][d1] || C[2][d2]){
                    ok=0;
                }else{
                    C[0][c]=1;
                    C[1][d1]=1;
                    C[2][d2]=1;
                }
            }
            OL(ok ? "YES" : "NO");
        }
        return 0;
    }
    View Code

    1.应快速思考出对角线的ID表达式

    2.应写出简洁高效美观的代码,原来的代码感觉写的太愚蠢了,也没有通过最后一个case。然后我在网上看到这段代码(左):

    被深深的震撼到了,居然可以写的这么简洁,并且用二维数组代替我原来写的四个数组。然后我删掉了花20分钟写的代码,用了5分钟重写了一遍(右)。

    3.memset的使用情景:

    memset只能赋值全是0(0x0……0),或者全是1(0xF……F),后者 反映在int上,就是用补码表示的-1。memset的方便之处在于他可以对高维数组进行初始赋值,并且速度相对较快。

    4.sizeof的返回值

    如果是已经分配好内存的静态数组,如int arr[LEN],sizeof(arr)的返回值就是4*LEN

    如果是分配的堆,如int *arr=new int[LEN],sizeof(arr)的返回值就是4

  • 相关阅读:
    Exp7 网络欺诈防范
    Exp6 信息搜集与漏洞扫描
    Exp4 恶意代码分析
    Exp2 后门原理与实践
    PC平台逆向破解实验报告
    See You Again——我最后的汇编程序
    表格标签
    ansible环境搭建
    OSPF_1
    Linux的文件管理(8-27)
  • 原文地址:https://www.cnblogs.com/TQCAI/p/8167760.html
Copyright © 2020-2023  润新知