码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-01-01 18:21:28      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:表达   turn   ++   mat   网上   map   --   code   namespace   

写了三遍才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

 

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

标签:表达   turn   ++   mat   网上   map   --   code   namespace   

原文地址:https://www.cnblogs.com/TQCAI/p/8167760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!