zoukankan      html  css  js  c++  java
  • Evanyou Blog 彩带

    CSP考试由于是Linux评测系统,故使用windows参赛的选手避免不了出现系统之间的锅。

    windows用户真得劲!

    怎么办?还好官方给出NOI_Linux系统参赛。然而这篇Blog,会以Ubuntu系统进行演示(不用担心,Ubuntu和Linux除了界面不一样,实质和命令都是相同的)

    Ubuntu上场了

    Ubuntu编译指南

    进入Ubuntu系统,在你想存的地址中新建一个空白文档,名称是可以随需要写,但是 名称一定要记得加.cpp后缀!

    举个栗子: "A+B_Problem.cpp"

    即刻,右键点击文件,打开方式——选择 "GNU Emacs 25(GUI)" 。点进去后,直接开始写代码就好了。我们之所以要用GNU Emacs 25(GUI)打开,是因为下文的配置适用于GNU Emacs 25(GUI),且个人感觉GNU Emacs 25(GUI)更好用。

    比如:

    #include<bits/stdc++.h>
    using namespace std;
    int a,b;
    int main(){
    	scanf("%d %d",&a,&b);
    	printf("%lld",(long long)(a + b));
    	puts("");
    	return 0;
    }
    
    

    一定记得,每次打完代码,都要按Ctrl+x+s保存文件(不然一旦关机了......系统通常在你关闭未保存的文件时会提示你保存,点击yes即可)

    为什么?

    Ans:我们之后会讲到,当你需要运行文件时,要在终端先编译源代码,然后运行类似于windows中的.exe文件的a.out。然而,当你不保存源文件,之后的编译操作都只会编译未修改前的代码,故不管怎么改,输出都不会改变。

    · 首先,将代码保存(请先确保能编译),并确保是否需要开文件(freopen)

    · 然后,打开终端,输入文件所在路径,如当文件在桌面中的新建文件夹里面,则输入 "cd 桌面/新建文件夹"

    · 这时,输入"g++ 代码名称.cpp",如"g++ check.cpp",此乃编译文件。若终端提示错误时,请回到程序修改Bug,并将步骤从“首先”二字重新开始。

    · 然后,你会发现文件夹中多了一个"a.out",这时,在终端输入"./a.out",并输入样例,按回车,就可以得到输出了。当你的代码有文件时,请确保有输入文件,输出也会在输出文件中。

    然而有时候编译错误,终端会详细提示你哪里有问题(具体怎么样全靠大家英语能力了)。

    是不是很激动?

    GNU Emacs 25(GUI)编译器配置优化

    在windows中用Dev-C++用顺手了,用这个四不像的编译器真TM想骂人。

    那么我们不妨来修改修改配置,让编译器更加清爽。

    怎么修改配置呢

    首先,点击文件,进入主文件夹(Home),按Ctrl+h显示所有文件,然后新建空白文档,文档名".emacs",在里面输入下面的东西,复制粘贴即可。

    超级豪华顶级配置 (当你在家食用Ubuntu的时候,肯定希望配置越NB越好。)

    (global-set-key [f9] 'compile-file)
    (global-set-key [f10] 'gud-gdb)
    (global-set-key (kbd "C-s") 'save-buffer)
    (global-set-key (kbd "C-z") 'undo)
    (global-set-key (kbd "RET") 'newline-and-indent)
    (global-linum-mode t)
    (show-paren-mode t)
    (define-key key-translation-map (kbd "C-d") (kbd "M-p M-y"))    
    (global-set-key (kbd "M-p M-y") 'kill-whole-line)
    (define-key key-translation-map (kbd "C-a") (kbd "C-x h"))
    (setq c-default-style "awk")
    ;;;上面是考场必备
    (ido-mode t)
    
    (setq default-frame-alist
                 '((vertical-scroll-bars)
                   (top . 25)
                   (left . 45)
                   (width . 120)
                   (height . 40)
                   (background-color . "grey15")
                   (foreground-color . "grey")
                   (cursor-color . "gold1")
                   (mouse-color . "gold1")
                   (tool-bar-lines . 0)
                   (menu-bar-lines . 1)
                   (scroll-bar-lines . 0)
                   (right-fringe)
                   (left-fringe)))
    
    (global-hl-line-mode 1)
    
    (set-face-background 'highlight "gray5")
    (set-face-foreground 'region "cyan")
    (set-face-background 'region "blue")
    (set-face-foreground 'secondary-selection "skyblue")
    (set-face-background 'secondary-selection "darkblue")
    
    ;;;;;设置org模式
    (setq org-startup-indented t)
    ;(setq org-log-done 'time)
    ;(s.etq org-log-done 'note)
    ;
    
    ;;;无关紧要
    (set-cursor-color "wheat")
    (set-mouse-color "wheat")
    (global-font-lock-mode t);;高亮
    ;;;;;设置编译信息
    (defun compile-file ()
      (interactive)
      (compile (format "g++ -o %s %s -g -lm -Wall"  (file-name-sans-extension (buffer-name))(buffer-name))))
    ;;(global-set-key (kbd "<f9>") 'compile-file)
    ;;;;;设置F9一键调试
    ;;;;;改变emacs标题栏的标题
    (setq frame-title-format "CJY-Dragon")
    ;;;;;允许emacs和外部其他程序的粘贴
    (setq x-select-enable-clipboard t)
    ;; 显示列号
    (setq column-number-mode t)
    ;;设置tab的宽度
    (setq default-tab-width 4)
    (setq c-basic-offset 4)
    ;;;;;启用时间显示设置(可能时间需要调整)
    (display-time-mode 1)
    ;;;;;时间使用24小时制
    (setq display-time-24hr-format t)
    ;;;;;时间显示包括日期和具体时间
    (setq display-time-day-and-date t)
    ;;;;;时间的变化频率
    (setq display-time-interval 10)
    ;;;;;是用滚轴鼠标
    (mouse-wheel-mode t)
    ;;;;;备份设置
    ;;;;;emacs还有一个自动保存功能,默认在~/.emacs.d/auto-save-list里,这个非常有用,我这里没有改动,具体可以参见Sams teach yourself emacs in 24hours(我简称为sams24)
    ;;;;;备份设置方法,直接拷贝
    (setq backup-by-copying t)
    ;; 自动存盘
    (setq auto-save-mode t)
    ;;去警告铃声
    (setq visible-bell nil)
    (setq ring-bell-function 'ignore)
    ;;;;;指针取消闪动,不然眼睛会花了
    (blink-cursor-mode -1)
    ;;;;;滚动页面时比较舒服,不要整页的滚动
    (setq scroll-step 1
            scroll-margin 3
            scroll-conservatively 10000)
    ;;;;;设定删除保存记录为200,可以方便以后无限恢复
    (setq kill-ring-max 200)
    ;;;;;修改透明度
    (set-frame-parameter (selected-frame) 'alpha (list 85 50))
    (add-to-list 'default-frame-alist (cons 'alpha (list 85 50)))
    (setq-default cursor-type 'bar)
    
    (show-paren-mode 1);;括号匹配
    (fset 'yes-or-no-p 'y-or-n-p);;酱油的
    (setq make-backup-files nil)
    (global-auto-revert-mode t);自动reload文件
    
    (global-set-key (kbd "<f8>") 'gdb-many-windows)
    
    (custom-set-variables
     ;; custom-set-variables was added by Custom.
     ;; If you edit it by hand, you could mess it up, so be careful.
     ;; Your init file should contain only one such instance.
     ;; If there is more than one, they won't work right.
     '(blink-cursor-mode nil)
     '(column-number-mode t)
     '(cua-mode t nil (cua-base))
     '(display-time-mode t)
     '(inhibit-startup-screen t)
     '(show-paren-mode t))
    (custom-set-faces
     ;; custom-set-faces was added by Custom.
     ;; If you edit it by hand, you could mess it up, so be careful.
     ;; Your init file should contain only one such instance.
     ;; If there is more than one, they won't work right.
     '(default ((t (:family "Ubuntu Mono" :foundry "unknown" :slant normal :weight normal :height 143 :width normal)))))
    (auto-insert-mode)  ;;; Adds hook to find-files-hook
    (setq auto-insert-directory "~/.emacs.d/mytemplates/") ;;; Or use custom, *NOTE* Trailing slash important
    (setq auto-insert-query nil) ;;; If you don't want to be prompted before insertion
    (define-auto-insert "." "moban.cpp")
    

    但是这个配置在考场上又不能复制粘贴,这么一大段,也被不下来吧

    考场易记高级配置

    (set-background-color "gray15")
    (set-foreground-color "gray")
    
    (global-set-key [f9] 'compile)
    (global-set-key [f10] 'gud-gdb)
    (global-set-key (kbd "C-s") 'save-buffer)
    (global-set-key (kbd "C-a") 'mark-whole-buffer)
    (global-set-key (kbd "RET") 'newline-and-indent)
    
    (setq default-cursor-type 'bar)
    (setq default-tab-width 4)
    (setq c-default-style "awk")
    
    (set-frame-parameter (selected-frame) 'alpha (list 85 50))
    

    粘贴完之后呢

    保存,关闭即可。这时候再用GNU Emacs 25(GUI)打开你任意一个程序

    哇,爽爆了

    修改配置的好处都有啥?

    谁说对了就给他

    御·Dragon的感受如下

    1. F9一键编译,可以避免在终端g++时编译错误又返回而浪费时间。
    2. F10一键运行,不用到终端去了
    3. 编译器透明,(需要超级豪华顶级配置),要看题面、数据时不用总是切屏
    4. 页面及其清爽

    @Karry5307 大神给出了一些别的界面优化

    Ubuntu对拍帮手

    对拍是什么?

    这里我不细说。

    就是两个源程序,一个对拍程序,随机一组数据比较两个源程序的输出一不一样

    Ubuntu的对拍怎么弄?

    注意:对拍一定要开文件!

    我们这里一共需要 4 个程序,分别是"data.cpp"、"my.cpp"、 "text.cpp"、"check.sh"

    (重点) 在每次修改完后、对拍前,请先进入"my.cpp"、"text.cpp"与"data.cpp"进行编译,否则新的对拍只会测试修改前的代码,使得答案不改变!

    "data.cpp"为数据生成程序,随题目需要求改

    我们还是拿A+B举例子,A+B的随机数据代码如下

    #include<bits/stdc++.h>
    using namespace std;
    
    const long long MOD=1e18;
    
    int main()
    {
        freopen("input.in","w",stdout);//input.in是对拍当前输入数据的文件
        srand(time(NULL));//这个地方很重要,保证了你每次随机出来的数不一样
        int a,b;
    	a = rand()%100000000;//随机数
    	b = rand()%100000000;//随机数
    	printf("%d %d",a,b);
    	return 0;
    }
    
    

    "my.cpp"为 自己写的 程序(即正确性需要对拍验证的程序)

    #include<bits/stdc++.h>
    using namespace std;
    int a,b;
    int main(){
        freopen("input.in","r",stdin);
        freopen("my.out","w",stdout);
    	scanf("%d %d",&a,&b);
    	printf("%lld",(long long)(a + b - 1));
    	puts("");
    	return 0;
    }
    
    

    "text.cpp"为与你自己程序 对拍的程序 (如题解、暴力等)

    #include<bits/stdc++.h>
    using namespace std;
    int a,b;
    int main(){
        freopen("input.in","r",stdin);
        freopen("text.out","w",stdout);
    	scanf("%d %d",&a,&b);
    	printf("%lld",(long long)(a + b));
    	puts("");
    	return 0;
    }
    
    
    

    "check.sh"为对拍程序

    在check.sh中输入(推荐使用emacsGUI编译)

    #!bin/bash
    while true; do
    ./data
    ./my
    ./text
    if diff my.out text.out; then
    echo AC
    else
    echo WA
    exit 0
    fi
    done
    

    以上全部保存到文件里面即可。

    然后在终端输入在终端输入

    bash ./check.sh
    

    即可运行进行对拍

    百度网盘对拍压缩包(A+B-Problem为例,test.cpp不保证为正解A+B Problem 都不是正解的我太菜了)提取码: dhe5

    欢迎前来拍砖

  • 相关阅读:
    dotnetcore3.1 WPF 实现多语言
    dotnetcore3.1 WPF 中使用依赖注入
    [svc]打通mysql主从同步
    [svc]glusterfs的简单部署
    [svc]inotify+rsync解决nfs单点问题
    [svc]rsync简单部署
    [svc]linux文件权限
    [svc]ssh批量分发key/批量用户管理
    [svc]NFS存储企业场景及nfs最佳实战探究
    [svc]mount命令及解决因/etc/fstab错误导致系统不能启动故障
  • 原文地址:https://www.cnblogs.com/CJYBlog/p/ubuntu.html
Copyright © 2011-2022 走看看