Untitled
Anonymous
plain_text
03/28/2026 5:02 PM
4.4 KB
56
Indexable
========= Q1 ==========
class Solution {
public:
int minAbsoluteDifference(vector<int>& nums) {
int n=nums.size(),ans=-1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(nums[i]==1 && nums[j]==2){
int diff=abs(i-j);
if(ans==-1 || ans>diff) ans=diff;
}
}
}
return ans;
}
};
========= Q2 ==========
#define ll long long int
const ll mod=1e9+7;
// module inverse
ll mi(ll n,ll m){ll pw=n%m;ll ex=m-2;ll ans=1;while(ex){if(ex&1) ans = ans*pw%m;pw = pw*pw%m;ex>>=1;}return ans%mod;}
class Solution {
public:
int countVisiblePeople(int n, int pos, int k) {
vector<ll> fac(n+1);
fac[0]=1;
for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod;
int left=pos;
int right=n-left-1;
ll ans=0;
for(int l=0;l<=k;l++){
int r=k-l;
if(l<=left && r<=right){
// leftCl * rightCr
ll waysL=(fac[left]*mi(fac[l],mod)%mod)*mi(fac[left-l],mod)%mod; // fac[left]/(fac[l]*fac[left-l])
ll waysR=(fac[right]*mi(fac[r],mod)%mod)*mi(fac[right-r],mod)%mod;
ans=(ans+waysL*waysR)%mod;
}
}
return ans*2%mod;
}
};
========= Q3 ==========
class Solution {
public:
int minCost(vector<vector<int>>& grid) {
int m=grid.size(),n=grid[0].size();
int dp[m][n][1024];
// dp[i][j][k]=1 means there exist a path from (0,0) -> (i,j) such that the bitwise XOR value of all numbers along the path is exactly = k
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
for(int k=0;k<1024;k++) dp[i][j][k]=-1;
}
}
dp[0][0][grid[0][0]]=1;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
for(int k=0;k<1024;k++){
if(i>=1 && dp[i-1][j][k]!=-1) dp[i][j][k^grid[i][j]]=1;
if(j>=1 && dp[i][j-1][k]!=-1) dp[i][j][k^grid[i][j]]=1;
}
}
}
for(int i=0;i<1024;i++){
if(dp[m-1][n-1][i]!=-1) return i;
}
assert(false);
return -1;
}
};
========= Q4 ==========
class Solution {
public:
int countArrays(vector<int>& digitSum) {
int n=digitSum.size();
unordered_map<int,vector<int>> mp;
for(int i=0;i<=5000;i++){
int dsum=0,z=i;
while(z) dsum+=(z%10),z/=10;
mp[dsum].push_back(i);
}
const int mod=1e9+7;
vector<unordered_map<int,int>> dp(n);
for(int x:mp[digitSum[0]]) dp[0][x]=1;
for(int i=1;i<n;i++){
auto v1=mp[digitSum[i-1]];
int m=v1.size();
if(m>0){
vector<int> pre(m);
pre[0]=dp[i-1][v1[0]];
for(int j=1;j<m;j++){
pre[j]=(pre[j-1]+dp[i-1][v1[j]])%mod;
}
auto v2=mp[digitSum[i]];
for(int x:v2){
int idx=(upper_bound(v1.begin(),v1.end(),x)-v1.begin())-1;
if(idx>=0){
dp[i][x]+=pre[idx];
dp[i][x]%=mod;
}
}
}
}
int ans=0;
for(int x:mp[digitSum.back()]) ans=(ans+dp[n-1][x])%mod;
return ans;
}
};Editor is loading...
Leave a Comment