NC201950. 草莓
描述
输入描述
第一行一个正整数 代表数据组数()。
接下来 行每行一组数据。
每组数据包含五个正整数 (,,,)。
输出描述
每组数据输出一行,为答案模 的余数。
示例1
输入:
5 2 2 1 1 1 2 2 1 1 2 2 2 1 1 3 2 2 1 1 4 2 2 1 1 5
输出:
1 3 6 10 14
C++14(g++5.4) 解法, 执行用时: 545ms, 内存消耗: 6388K, 提交时间: 2020-02-19 23:26:32
#pragma GCC optimize(3) #include <bits/stdc++.h> #define inf 1000000000 #define Inf 223372036854775807 #define maxn 1001000 using namespace std; typedef long long ll; const ll mod=998244353; const long double eps=1e-9; const long double PI=acos(-1.0); ll T, n, m, x, y, k, inv=499122177; ll cal(ll l, ll r) { l%=mod, r%=mod; return (l+r)*((r-l+mod+1)%mod)%mod*inv%mod; } int main() { cin>>T; while (T--) { cin>>n>>m>>x>>y>>k; if (n>m) swap(n, m), swap(x, y); if (n>1) { if (k>=n*m) cout<<cal(k-n*m+1, k)<<"\n"; else cout<<cal(1, k)<<"\n"; } else { ll sho=max(min(y-1, m-y)-1, 0ll), len; if (k<=m-sho) len=k; else len=m-sho+(k-m+sho)/2; if (k>=sho+m) len=m; cout<<cal(k-len+1, k)<<"\n"; } } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 137ms, 内存消耗: 5784K, 提交时间: 2020-02-03 18:12:44
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=998244353; int inv2; ll cal(ll l,ll r) { l=max(l,0LL); l%=mod;r%=mod; return (l+r)*(r-l+1)%mod*inv2%mod; } int main() { int T; scanf("%d",&T); inv2=(mod+1)/2; while (T--) { int n,m,x,y; ll k; scanf("%d%d%d%d%lld",&n,&m,&x,&y,&k); if (n<m) swap(n,m),swap(x,y); int mi=max(min(x-1,n-x),0); if (m>1 || k<=n-mi || k>=n+mi) { printf("%lld\n",cal(k-1LL*n*m+1,k)); continue; } printf("%lld\n",cal((k-(n-mi))/2+1,k)); } return 0; }