ACM 入门FAQ

多组输入问题(以C语言为例)

scanf函数原型int scanf( const char *format, … );

scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。

其调用格式为: scanf(“<格式化字符串>”,<地址表>);

函数 scanf() 是从标准输入流 stdin 中读内容的通用子程序,可以读入全部固有类型的数据并自动转换成机内形式。

折叠scanf的返回值

scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。(EOF 为-1)


多组处理

ACM多组数据处理到文件结尾, 这时如果用scanf();读入会返回EOF结束程序

    int n, m;

    while(scanf("%d%d", &n, &m) != EOF){
        //code
    }

    while(cin >> n >> m){

    }

这是一般写法

特殊写法:

    int n;

    while(~scanf("%d", &n)){
        //code
    }

这里遇到文件结尾, 返回EOF, 也就是-1, ~是单目取反运算符, 把操作数各位取反(0 -> 1 或是1 -> 0), 所以~-1 = 0, 退出


多组加条件控制

ex

程序有多组读入数据, 以0结束

处理思路:

在上面处理的基础上加上条件控制就可以

实现:


    int n;

    while(~scanf("%d", &n)){
        if(n == 0)
            break;
        //code
    }

或者用逗号运算符在读入的时候加限制


    int n;

    while(~scanf("%d", &n), n){
        //code
    }

给定组数

这个比较好理解


    int T;
    scanf("%d", &T);

    while(T--){
        //code
    }

数组空间大小

如果需要开数组, 并且题目指出最大的容量为10000, 就把数组略开大, 防runtime error


const int maxn = 10000 + 5;

int a[maxn];

浅谈各种评判结果的最大可能bug

评判结果问题可能原因
PE格式问题一般是换行空格
TLE超时复杂度太高或者数组开小或者数据类型小了
MLE超内存开数组太大
OLE输出太多内容debug的输出没注释掉
WA答案错误溢出或者算法问题
AC程序正确或许数据水, 少, 反正过了
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值