2 2 6 1 1 0 50000 50000 1000000000
8 0 1562562500625000000
Submit Status
超时的算法
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { int n,m,k; while(~scanf("%d%d%d",&n,&m,&k)) { k/=2; long long sum=0; for(int i=1;;i++) { if(i>=k||i>n) break; for(int j=1;;j++) { if(j>=k||j>m||j+i>k) break; sum+=(n-i+1)*(m-j+1); } } printf("%lld\n",sum); } }
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { long long int n,m,k; while(~scanf("%lld%lld%lld",&n,&m,&k)) { k/=2; long long sum=0; if(k>n+m) k=n+m; for(long long i=1;;i++) { if(i>=k||i>n) break; if(k-i>=m) {sum+=(((m+1)*m/2)*(n-i+1)); //等差公式 ,从m+....+1 } else {sum+=(((2*m-k+i+1)*(k-i)/2)*(n-i+1)); //等差公式,从m+..+(m-(k-i)+1)<span id="transmark"></span> } } printf("%lld\n",sum); } }