// 如果卡牌有r套,返回值为手写的卡牌是否够用,不够返回false,够返回true bool f(int r){ int tmp = m; // 临时记录空白卡牌的数量 for(int i = 1;i <= n;i++){ /* 注意:放这里是错误的 // 如果空白卡牌数量不够用,返回false if(tmp < 0){ return false; } */ // 如果该种卡牌的手写次数够 if(a[i] + b[i] >= r){ tmp -= (r - a[i]) > 0?(r - a[i]) : 0; } // 该种卡牌的手写次数不够 else{ return false; } } // 如果空白卡牌数量不够用,返回false if(tmp < 0){ return false; } return true; }
为什么(tmp < 0)这个判断放在for循环外就可以,放在for循环内判断就过不了样例4,它的作用不是一样滴吗