#include<bits/stdc++.h>
using namespace std;
#define me(a,x) memset(a,x,sizeof(a))
#define sc scanf
#define pr printf
#define IN freopen("in.in","r",stdin);
#define OUT freopen("out.out","w",stdout);
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+6;
const int mod=1e9+7;
template<typename T>int O(T s){cout<<s<<endl;return 0;}
template<typename T>void db(T *bg,T *ed){while(bg!=ed)cout<<*bg++<<' ';puts("");}
inline ll mul_64(ll x,ll y,ll c){return (x*y-(ll)((long double)x/c*y)*c+c)%c;}
inline ll ksm(ll a,ll b,ll c){ll ans=1;for(;b;b>>=1,a=a*a%c)if(b&1)ans=ans*a%c;return ans;}
inline void exgcd(ll a,ll b,ll &x,ll &y){if(!b)x=1,y=0;else exgcd(b,a%b,y,x),y-=(a/b)*x;}
int main(){
int t;cin>>t;
while(t--){
int n,m;cin>>n>>m;
puts(n%m?"NO":"YES");
}
}#include<bits/stdc++.h>
using namespace std;
#define me(a,x) memset(a,x,sizeof(a))
#define sc scanf
#define pr printf
#define IN freopen("in.in","r",stdin);
#define OUT freopen("out.out","w",stdout);
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+6;
const int mod=1e9+7;
template<typename T>int O(T s){cout<<s<<endl;return 0;}
template<typename T>void db(T *bg,T *ed){while(bg!=ed)cout<<*bg++<<' ';puts("");}
inline ll mul_64(ll x,ll y,ll c){return (x*y-(ll)((long double)x/c*y)*c+c)%c;}
inline ll ksm(ll a,ll b,ll c){ll ans=1;for(;b;b>>=1,a=a*a%c)if(b&1)ans=ans*a%c;return ans;}
inline void exgcd(ll a,ll b,ll &x,ll &y){if(!b)x=1,y=0;else exgcd(b,a%b,y,x),y-=(a/b)*x;}
int main(){
int t;cin>>t;
while(t--){
int n;cin>>n;
vector<int>v(n,0);
for(int i=0;i<n;i++)cin>>v[i];
sort(v.begin(),v.end());
for(int i=n-1;~i;i--)cout<<v[i]<<" ";O("");
}
}C.Adding Powers进制下每一位必须是
,计算为
的位是否大于1。
#include<bits/stdc++.h>
using namespace std;
#define me(a,x) memset(a,x,sizeof(a))
#define sc scanf
#define pr printf
#define IN freopen("in.in","r",stdin);
#define OUT freopen("out.out","w",stdout);
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+6;
const int mod=1e9+7;
template<typename T>int O(T s){cout<<s<<endl;return 0;}
template<typename T>void db(T *bg,T *ed){while(bg!=ed)cout<<*bg++<<' ';puts("");}
inline ll mul_64(ll x,ll y,ll c){return (x*y-(ll)((long double)x/c*y)*c+c)%c;}
inline ll ksm(ll a,ll b,ll c){ll ans=1;for(;b;b>>=1,a=a*a%c)if(b&1)ans=ans*a%c;return ans;}
inline void exgcd(ll a,ll b,ll &x,ll &y){if(!b)x=1,y=0;else exgcd(b,a%b,y,x),y-=(a/b)*x;}
int n,k;
int main(){
int t;cin>>t;
while(t--){
sc("%d%d",&n,&k);
int b[65]={0};bool f=1;
for(int i=1;i<=n;i++){
ll x;
sc("%lld",&x);
if(x==0)continue;
int ans=0;
while(x){
if(x%k==0)ans++,x/=k;
else if(x%k==1)b[ans++]++,x/=k;
else {f=0;break;}
}
}
for(int i=0;i<65&&f;i++)if(b[i]>1)f=0;
puts(f?"YES":"NO");
}
}D.Count the Arrays
因为要求必须有一对数相同,所以先从个数里选
个数,
。
选择一个数使得有一对数相同,首先不能和最大值相同所以只能从个数里选一个。
最后除了一对相同的数和最大值,其他个数可以选择放在最大值一边排好序,所以有
种。
最后答案就是
#include<bits/stdc++.h>
using namespace std;
#define me(a,x) memset(a,x,sizeof(a))
#define sc scanf
#define pr printf
#define IN freopen("in.in","r",stdin);
#define OUT freopen("out.out","w",stdout);
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+6;
const int mod=998244353;
template<typename T>int O(T s){cout<<s<<endl;return 0;}
template<typename T>void db(T *bg,T *ed){while(bg!=ed)cout<<*bg++<<' ';puts("");}
inline ll mul_64(ll x,ll y,ll c){return (x*y-(ll)((long double)x/c*y)*c+c)%c;}
inline ll ksm(ll a,ll b,ll c){ll ans=1;for(;b;b>>=1,a=a*a%c)if(b&1)ans=ans*a%c;return ans;}
inline void exgcd(ll a,ll b,ll &x,ll &y){if(!b)x=1,y=0;else exgcd(b,a%b,y,x),y-=(a/b)*x;}
template<const int N_,int M>
struct Cr{
ll fac[N_],inv[N_];
Cr(){
fac[0]=1;
for(int i=1;i<N_;i++)fac[i]=fac[i-1]*i%M;
inv[N_-1]=::ksm(fac[N_-1],M-2,M);
for(int i=N_-2;i>=0;i--)inv[i]=inv[i+1]*(i+1)%M;
}
ll operator()(int a,int b){
if(a<b || a<0)return 0;
return fac[a]*inv[a-b]%M*inv[b]%M;
}
};
int main(){
Cr<200005,mod> C;
int n,m;
cin>>n>>m;
if(n==2)return O(0);
return O(C(m,n-1)*(n-2)%mod*ksm(2,n-3,mod)%mod);
}E.Array Shrinking
首先可以利用栈巧妙的算出区间内合并后剩余的数字个数,然后就是区间dp的模板。
#include<bits/stdc++.h>
using namespace std;
int n;
int a[505],dp[505][505];
int t=0,s[505];
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]),dp[i][i]=1;
for(int len=2;len<=n;len++){
for(int l=1;l+len-1<=n;l++){
int r=l+len-1;t=0;
for(int k=l;k<=r;k++){
int v=a[k];
while(t&&s[t]==v)t--,v++;
s[++t]=v;
}
dp[l][r]=t;
for(int k=l;k<r;k++)dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
}
}
printf("%d\n",dp[1][n]);
}
京公网安备 11010502036488号