NC219173. 你有一簇函数
描述
敌人又来入侵罗德岛了!这次他们排成了一个a × b的长方形(即在 0 ≤ x ≤ a , 0 ≤ y ≤ b的每个整数点有一个敌人);作为最强干员,你有一个特殊能力是对位于坐标轴副对角线及其平行直线上的敌人造成伤害(即位于函数簇 x + y = z , 0 ≤ z ≤ c 上的敌人),能力可以发动无数次,问你总共能击打到多少敌人;
输入描述
第一行三个整数a,b,c (0 ≤ a, b, c ≤ 106)
输出描述
输出一个数字,即击打敌人总数
示例1
输入:
6334 18467 41
输出:
903
Java(javac 1.8) 解法, 执行用时: 33ms, 内存消耗: 12212K, 提交时间: 2021-03-21 21:53:03
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long a =sc.nextLong(); long b =sc.nextLong(); long c =sc.nextLong(); long n =10*10*10*10*10*10*10; long ans = 0; long y; if(a<=n&&b<=n&&c<=n&&a>=0&&b>=0&&c>=0) {for(long x=0;x<=a;x++) { y = c-x; if(y>b) ans =ans+b+1; else if(y>=0&&y<=b) ans = ans +y+1; } System.out.print(ans);} } }
C++(clang++11) 解法, 执行用时: 7ms, 内存消耗: 532K, 提交时间: 2021-03-24 16:15:21
#include<bits/stdc++.h> using namespace std; signed main() { int a,b,c; cin>>a>>b>>c; long long ans=0,mn=min(a+b,c); for(int z=0;z<=mn;z++) ans=ans+(min(z,b)-max(0,z-a)+1); cout<<ans<<endl; return 0; }