Start Time:2017-07-15 12:00:00 End Time:2017-07-15 15:46:00
Time Limit:5s Memory Limit:256MByte
Submissions:1764Solved:348
今天HHHH考完了期末考试,他在教学楼里闲逛,他看着教学楼里一间间的教室,于是开始思考:
如果从一个坐标为 (x1,y1,z1)(x1,y1,z1)的教室走到(x2,y2,z2)(x2,y2,z2)的距离为 |x1−x2|+|y1−y2|+|z1−z2||x1−x2|+|y1−y2|+|z1−z2|
那么有多少对教室之间的距离是不超过RR的呢?
#include <bits/stdc++.h> using namespace std; typedef long long LL; int M[11][11][11]; LL N[32]; int main(){ int t; cin>>t; while(t--){ memset(M,0,sizeof(M)); memset(N,0,sizeof(N)); int n,q; cin>>n>>q; for(int i=0;i<n;i++){ int x,y,z; cin>>x>>y>>z; M[x][y][z]++; } for(int i=0;i<11;i++) for(int j=0;j<11;j++) for(int k=0;k<11;k++) for(int l=0;l<11;l++) for(int m=0;m<11;m++) for(int n=0;n<11;n++){ if(i==j&&k==l&&m==n) N[0]+=M[i][k][m]*1LL*(M[i][k][m]-1); else N[abs(j-i)+abs(l-k)+abs(n-m)]+=M[i][k][m]*1LL*M[j][l][n]; } LL f=0; for(int i=0;i<31;i++){ N[i]+=f; f=N[i]; } while(q--){ int p; cin>>p; if(p>30) cout<<n*1LL*(n-1)/2<<endl; else cout<<N[p]/2<<endl; } } return 0; }
Time Limit:5s Memory Limit:256MByte
Submissions:786Solved:201
今天HHHH在操场上跑步,HHHH作为一个爱运动的人,肯定会想方设法把跑步所消耗的能量减到最少.
现在这个操场上有nn个可以休息的点,他们的坐标分别为x1,x2...xn(xi≤xi+1)x1,x2...xn(xi≤xi+1),HHHH刚开始在 x1x1 ,并且他只能在这些点休息,在中途不能停下来,否则会因为旁边的音浪太强而被晃到.
如果HHHH连续跑一段长度为ll的距离,那么他将会消耗2l+a2l+a的能量(aa为HHHH的可爱值)
现在给你这些点的坐标,请帮HHHH计算他跑到xnxn点所需要消耗的能量最少是多少.
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll a[100005],dp[100005]; int main() { int t,n,m; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) scanf("%lld",&a[i]); dp[1]=0; for(int i=2; i<=n; i++) { dp[i]=1e18+10; ll l=0; for(int j=i-1; j>=1; j--) { l+=a[j+1]-a[j]; if(l<=40) dp[i]=min(dp[i],dp[j]+((1ll)<<l)+m); else break; } } printf("%lld ",dp[n]); } return 0; }
Time Limit:5s Memory Limit:256MByte
Submissions:539Solved:122
今天HHHH在学数论,他看到一个很优美的式子:
∑ni=1ik mod p∑i=1nik mod p
一向热衷于抱队友大腿的HHHH便问队友ZZZZ怎么做
ZZZZ:"n,kn,k多大?"
HHHH:"105,105105,105"
ZZZZ:"快速幂嘛"
HHHH:"109,105109,105"
ZZZZ:"拉格朗日插值嘛"
HHHH:"1018,10181018,1018"
队友:"让我想想.."
快速幂加快速乘法,骚操作,这个快快速幂还好,这个快速乘法是真的骚
#include <bits/stdc++.h> using namespace std; typedef long long LL; LL p, k; LL quick_mul(LL x,LL y,LL MOD) { x = x%MOD,y = y%MOD; return ((x*y-(LL)(((long double)x*y+0.5)/MOD)*MOD)%MOD+MOD)%MOD; } LL quick_Mod(LL x, LL n) { LL ans = 1; while(n) { if(n&1) { ans = quick_mul(ans, x, p); } x = quick_mul(x, x, p); n >>= 1; } return ans; } int main() { LL n; int t; scanf("%d", &t); while(t--) { scanf("%lld%lld%lld", &n, &k, &p); if(k==0) { printf("%lld ",n%p); continue; } LL ans = 0; if(k%(p-1) == 0) { ans = (ans + quick_mul(p-1, n/p, p))%p; } n %= p; for(LL i = 1; i <= n; i++) { ans = (ans + quick_Mod(i, k))%p; } printf("%lld ", ans); } return 0; }