D2代码AC集

幂取模

#include<cstdio>
using namespace std;
long long a,b,p,ans=1;
long long qpow(long long a,long long b,long long p){
	while(b>0){
		if(b%2==1){
			ans=(ans*a)%p;
		} 	
		a=(a*a)%p;
		b>>=1;//等于b=b/21或b=b>>1
	}
	return ans;
}
int main(){
	scanf("%d%d%d",&a,&b,&p);
	long long s=qpow(a,b,p);
	printf("%d",s);
	return 0;
}

矩阵置0

#include<iostream>
using namespace std;
int main(){
	int n,m;
	int cnt=0;
	bool f=0;
	cin>>n>>m;
	int a[305][305],b[305],c[305];
	for(int i=1;i<=n;i++){
	    for(int j=1;j<=m;j++){
	        cin>>a[i][j];
	        if(a[i][j]==0){
	           b[cnt]=i;
	           c[cnt]=j;
	           cnt++;
	        }
	    }
	}
	
	  for(int i=0;i<cnt;i++){
	      for(int j=1;j<=m;j++){
	         a[b[i]][j]=0; 
	      }
	      for(int j=1;j<=n;j++){
	          a[j][c[i]]=0;
	      }
	  }
	 
	
	for(int i=1;i<=n;i++){
	    for(int j=1;j<=m;j++){
	        cout<<a[i][j]<<" ";
	    }
	   cout<<endl;
	}
	return 0;
}

查找特殊的点

#include<iostream>
using namespace std;
const int inf=0x3f3f3f;
int a[10][10],x[10],y[10],f=1,cnt;
int main(){
    for(int i=1;i<=5;i++){
        x[i]=-inf;
        for(int j=1;j<=5;j++){
            cin>>a[i][j];
            if(a[i][j]>x[i]){
                x[i]=a[i][j];
            }
        }
    }
   for(int i=1;i<=5;i++){
        y[i]=inf;
        for(int j=1;j<=5;j++){
            if(a[j][i]<y[i]){
                y[i]=a[j][i];
            }
        }
    }
    for(int i=1;i<=5;i++){
        int n=x[i];
        for(int j=1;j<=5;j++){
            if(y[j]==n){
                cout<<i<<" "<<j<<" "<<n;
                f=0;
                break;
        }
      }
    }
    if(f==1){
        cout<<"not found";
    }
	return 0;
}

矩阵运算

#include<iostream>
using namespace std;
int n[210][210],m[210][210],z[210][210],a,b,c;
int main(){
   cin>>a>>b>>c;
   for(int i=1;i<=a;i++){
       for(int j=1;j<=b;j++){
           cin>>m[i][j];
       }
   }
   for(int i=1;i<=b;i++){
       for(int j=1;j<=c;j++){
           cin>>n[i][j];
       }
   }
    for(int i=1;i<=a;i++){
        for(int j=1;j<=c;j++){
            for(int k=1;k<=b;k++){
                 z[i][j]+=m[i][k]*n[k][j];
            }
        }
    }
    for(int i=1;i<=a;i++){
        for(int j=1;j<=c;j++){
            cout<<z[i][j]<<" ";
        }
        cout<<endl;
    }
    
	return 0;
}

唯一分解定理

#include<iostream>
#include<cmath>
using namespace std;
int b[1100000],cnt,n,m;
void w(int n){
	int m=sqrt(n);
	for(int i=2;i<=m;i++){
			while(n%i==0){
			    b[++cnt]=i;
				n/=i;
		}
	}
	if(n>1){
		b[++cnt]=n;
	}
}
int main(){
	cin>>n;
	w(n);
	cout<<cnt<<endl;
	for(int i=1;i<=cnt;i++){
		cout<<b[i]<< " ";
		
	}
	return 0;
}

乘积为n的素数

#include<iostream>
#include<cmath>
using namespace std;
int b[1100000],cnt,n,m;
void w(int n){
	int m=sqrt(n);
	for(int i=2;i<=m;i++){
			while(n%i==0){
			    b[++cnt]=i;
				n/=i;
		}
	}
	if(n>1){
		b[++cnt]=n;
	}
}
int main(){
	cin>>n;
	w(n);
	cout<<cnt<<endl;
	for(int i=1;i<=cnt;i++){
		cout<<b[i]<< " ";
		
	}
	return 0;
}

LCM为n的最小因子和

#include<iostream>
#include<cmath>
using namespace std;
int b[1000000],n,cnt,sum;
int main(){
    cin>>n;
    int m=sqrt(n);
	for(int i=2;i<=m;i++){
		if(n%i==0){
		    b[++cnt]=1;
			while(n%i==0){
			    b[cnt]*=i;
				n/=i;
			}
		}
	}
	if(n>1){
	    b[++cnt]=n;
	}
	if(cnt==1){
	    cout<<n+1;
	}
	else{
	    for(int i=1;i<=cnt;i++){
	    sum+=b[i];
	   }
	   cout<<sum;
	}
	return 0;
}

出现次数最多的素因子

#include <iostream>
#include <cmath>
using namespace std;
int b[100010],p[100010],cnt,n,m,maxx=0,maxxx=0;
void w(int n){
	int m=sqrt(n);
	for(int i=2;i<=m;i++){
		if(n%i==0){
			b[++cnt]=i;
			while(n%i==0){
				n/=i;
				p[cnt]++;
			}	
		}
	}
	if(n>1){
		b[++cnt]=n;
		p[cnt]=1; 
	}
}
int main(){
	cin>>n;
	w(n);
   for(int i=1;i<=cnt;i++){
		if(maxx<=p[i]){
		    maxx=p[i];
		    maxxx=b[i];
		}
	}
	cout<<maxxx;
	return 0;
}

计算概率

#include<iostream>
#include<iomanip>
#include<cmath> 
#include<string>
#include<algorithm> 
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
using namespace std;
long long sum,a[210000];
int main(){
	long long n,l;
	cin>>n>>l; 
	for(int i=1;i<=n;i++){
	   cin>>a[i];
	}
	sort(a+1,a+n+1);
	int i=1,j=n;
	while(i<j){
		if(a[i]+a[j]<=l){
			sum+=(j-i);
			i++;
		}
		else{
			j--;
		}
	} 
	double h=n*(n-1)/2;
	printf("%.2lf",1.0*sum/h);
	return 0;
}

求正约数的个数

#include<iostream>
#include<cmath>
using namespace std;
long long ans=1,a[11000],p[11000];
int main(){
	long long n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>p[i]>>a[i];
	   ans*=(a[i]+1);
	}
	

	cout<<ans;
    return 0;
}

约数个数

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll s[N],p[N],cnt,n;
ll b[N];
void ola(){
	for(int i=2;i<=N-1;i++){
		if(!s[i]){
			p[++cnt]=i;
		}
		for(int j=1;j<=cnt&&p[j]<=N/i;j++){
			s[p[j]*i]=1;
			if(i%p[j]==0){
				break;
			}
		}
 
	} 
}
void w(int n){
	for(int i=1;i<=cnt&&p[i]<=n;i++){
			while(n%p[i]==0){
			    n=n/p[i];
			    b[i]++;
		}
	}
	if(n>1){
		p[++cnt]=n;
		b[cnt]=1;
	}
}
int main(){
    ola();
 while(cin>>n){
     long long fac=1;
     memset(b,0,sizeof b);
     w(n);
     for(int i=1;i<=cnt;i++){
         if(b[i]!=0){
             fac*=(b[i]+1);
         }
     }
     cout<<fac<<endl;
 }
	return 0;
}

求约数之和

#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=1e6+10;
const int M=1e9+7;
ll s[N],p[N],cnt,n,fac=1;
ll a[N],b[N];
void ola(){
	for(int i=2;i<=N-1;i++){
		if(!s[i]){
			p[++cnt]=i;
		}
		for(int j=1;j<=cnt&&p[j]<=N/i;j++){
			s[p[j]*i]=1;
			if(i%p[j]==0){
				break;
			}
		}
 
	} 
}
void w(int n){
	for(int i=1;i<=cnt&&p[i]<=n;i++){
			while(n%p[i]==0){
			    n=n/p[i];
			    b[i]++;
		}
	}
	if(n>1){
		p[++cnt]=n;
		b[cnt]=1;
	}
}
int main(){
    cin>>n;
    ola();
  for(int i=1;i<=n;i++){
      cin>>a[i];
      w(a[i]);
  }
  for(int i=1;i<=cnt;i++){
      if(b[i]!=0){
          ll sum=1,num=1;
          for(int j=1;j<=b[i];j++){
              num=num*p[i]%M;
              sum=(sum+num)%M;
          } 
		  fac=fac*sum%M;
      }
     
  }
  cout<<fac;
	return 0;
}

sum

#include<iostream>
#include<iomanip> 
using namespace std;
long long sum[110000],a[110000],n,m,t;
int main(){
    cin>>t;
    while(t--){
        long long f[110000]={0};
          cin>>n>>m;
        for(int i=1;i<=n;i++){
            cin>>a[i];
			sum[i]=sum[i-1]+a[i];
        }
        if(n>=m){
           cout<<"YES"<<endl; 
        }
        else {
       int flag=0;
       for(int i=1;i<=n;i++){
           f[sum[i]%m]++;
           if(sum[i]%m==0){
               flag=1;
               break;
           }
           if(f[sum[i]%m]>1){
               flag=1;
               break;
           }
       }
       if(flag==1){
           cout<<"YES"<<endl;
       }
       else{
           cout<<"NO"<<endl;
       }
}
}
	return 0;
} 

吃糖果

#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
long long a[1100000],n,t;
int main() {
	cin>>t;
	while(t--) {
		int sum=0;
		int maxx=-1;
		cin>>n;
		for(int i=1; i<=n; i++) {
			cin>>a[i];
		}
		sort(a+1,a+n+1);
		maxx=a[n];
		for(int i=1; i<=n-1; i++) {
			sum+=a[i];
		}
		if(sum>=maxx-1) {
			cout<<"Yes"<<endl;
		} else {
			cout<<"No"<<endl;
		}
	}
	return 0;
}

Boxes

#include<iostream>
#include<iomanip> 
using namespace std;
long long n,a,b,fac1=1,fac2=1,fac3=1,sum=1,ans=1;
int main(){
   cin>>n>>a>>b;
   int maxx=max(a,b);
   for(int i=1;i<=maxx;i++){//拿i个球
       fac1=fac1*(n+i-1)/i;
       sum+=fac1;
       if(i==a){//红球拿完了
           ans*=sum;
       }
       if(i==b){
           ans*=sum;
       }
   }
   cout<<ans;
	return 0;
}

前缀和

#include<iostream>
#include<iomanip> 
using namespace std;
long long sum[1100000],a[1100000],n,q; 
int main(){
   cin>>n>>q;
   for(int i=1;i<=n;i++){
   	cin>>a[i];
   	sum[i]=sum[i-1]+a[i];
   }
   int l,r;
   for(int i=1;i<=q;i++){
   	cin>>l>>r;
   	cout<<sum[r]-sum[l-1];
   }
	return 0;
}

求多组组合数

#include<iostream>
#include<iomanip>
#include<cmath>
#include<string>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<stack>
using namespace std;
int a[1100][1100],k,n,m;
int main() {
	a[1][1]=1;
	for(int i=2; i<=1001; i++) {
		for(int j=1; j<=i; j++) {
			a[i][j]=(a[i-1][j-1]+a[i-1][j])%10007;
		}
	}
	cin>>k;
	for(int i=1; i<=k; i++) {
		cin>>n>>m;
		cout<<a[n+1][m+1]<<endl;
	}


	return 0;
}

阶乘分解

#include<iostream>
using namespace std;
const int N=1e6+5;
int s[N],p[N],cnt,n;
void ola(){
    for(int i=2;i<=N;i++){
		if(s[i]==0){
			p[cnt++]=i;
		}
		for(int j=0;p[j]<=N/i;j++){
			s[p[j]*i]=1;
			if(i%p[j]==0){
				break;
			}
		}
 
	} 
}
 
int main(){
    int n;
    cin>>n;
    ola();
    for(int i=0;i<cnt&&p[i]<=n;i++){
        int y=n;
        int sum=0;
        while(y){
        sum+=y/p[i];
        y/=p[i];
		}
         cout<<p[i]<<" "<<sum<<endl;
    }
    return 0;
}   

求组合数-大数

#include<iostream>
#include<vector>
using namespace std;
const int N=1e9 + 7;
vector<int> b;
void p(int n) {
	int m=sqrt(n);
	for(int i=2; i<=m; i++) {
		while(n%i==0) {
			b[++cnt]=i;
			n/=i;
		}
	}
	if(n>1) {
		b[++cnt]=n;
	}
}
int d(int n, int m) {
	int pow = 0;
	while (n>=m) {
		int t=n/m;
		pow=t;
		n=t;
	}
	return pow;
}
int C(int n, int m) {
	long long ans = 1;
	vector<int> v = p(n);
	for (int i = 0; i < v.size(); i++) {
		int k = v.at(i),pow;
		pow = d(n, k) - d(m, k) - d(n - m, k);
		for (int j=0; j<pow; j++) {
			ans *= k;
			ans =ans%N;
		}
	}
	return (int)ans;
}


int main() {
	int n,m;
	while (cin>>n>>m) {
		cout << C(n, m) << endl;
	}
	return 0;
}

划分地盘

#include<iostream>
using namespace std;
int fun(int a,int b){
   
    if(a%b==0){
        return a/b;
    }
    else{
        return a/b+fun(b,a%b);
    }
}
int main(){
  int a,b;
  cin>>a>>b;
      cout<<fun(a,b);
	return 0;
} 

位数问题-奇数

#include<iostream>
#include<vector>
using namespace std;
int os[1005]={0,9,73},js[1005]={0,1,17};
int main() {
	int n;
	cin>>n;
	for(int i=3;i<=n;i++){
		js[i]=(js[i-1]*9+os[i-1]*1)%12345;
		os[i]=(os[i-1]*9+js[i-1]*1)%12345;
	} 
	cout<<js[n];
	return 0;
}

位数问题-偶数

#include<iostream>
#include<vector>
using namespace std;
int os[1005]={0,9,73},js[1005]={0,1,17};
int main() {
	int n;
	cin>>n;
	for(int i=3;i<=n;i++){
		js[i]=(js[i-1]*9+os[i-1]*1)%12345;
		os[i]=(os[i-1]*9+js[i-1]*1)%12345;
	} 
	cout<<os[n];
	return 0;
}

昆虫繁殖

#include<iostream>
using namespace std;
long long a[101],b[101];
int main(){
    long long x,y,z;
    cin>>x>>y>>z;
    for(int i=1;i<=x;i++){
        a[i]=1;
        b[i]=0;
        }
        for(int i=x+1;i<=z+1;i++){
            b[i]=y*a[i-x];
            a[i]=a[i-1]+b[i-2];
        }
        cout<<a[z+1]<<endl;
	return 0;
} 

踩方格

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
   int n;
   int s[25],d[25],z[25];
    s[1]=1;
    d[1]=1;
    z[1]=1;
   cin>>n;
   for(int i=2;i<=n;i++){
       s[i]=s[i-1]+d[i-1]+z[i-1];
       d[i]=d[i-1]+s[i-1];
       z[i]=z[i-1]+s[i-1];
   }
   
   cout<<s[n]+d[n]+z[n];
    return 0;
}

判断元素是否存在

#include<iostream>
#include<cstdio>
using namespace std;
bool fun(int x,int k){//所有返回值都是0或1
    if(x==2*k+1||x==3*k+1){
        return 1;
    }
    if(x>2*k+1){
        return fun(x,(2*k+1))||fun(x,(3*k+1));
    }
    if(x>3*k+1){
        return fun(x,(3*k+1));
    }
    if(x<2*k+1){
        return 0;
    }
}
int main(){
    int k,x;
   scanf("%d,%d",&k,&x);
    if(x==k){
       cout<<"YES";
     }
     else if(x>k){
       if(fun(x,k)==1){
           cout<<"YES";
       }
       else if(fun(k,x)==0){
           cout<<"NO";
       }
     }
     else if(x<k){
         cout<<"NO";
     }
   
    return 0;
}

Pell数列

#include<iostream>
using namespace std;
const int N=1e6;
int a[N];
int main(){
    int n,m;
    a[1]=1;
    a[2]=2;
    for(int i=3;i<=N;i++){
        a[i]=(2*a[i-1]+a[i-2])%32767;
    }
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>m;
        cout<<a[m]<<endl;
    }
    return 0;
}

TYK开店

#include<iostream>
#include<algorithm> 
using namespace std;
int n,m,a[110000];
int fun(int mid){
    int f=a[1];//上家店开在哪
    int cnt=1;
    for(int i=2;i<=n;i++){
        if(a[i]-f>=mid){
            cnt++;
            f=a[i];
        }
    }
    return cnt;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    int l=0,r=a[n]-a[1];
    while(l<r){
        //long long mid(l+r+1)/2;
       int  mid=l+(r-l+1)/2;
        if(fun(mid)>=m){
            l=mid;
        }
        else{
            r=mid-1;
        }
    }
    cout<<l;
    return 0;
}

数的范围

#include<iostream>
#include<algorithm> 
using namespace std;
int n,a[110000],q,k;
int main(){
   cin>>n>>q;
   for(int i=0;i<n;i++){
       cin>>a[i];
   }
   while(q--){
       cin>>k;
       int l=0,r=n-1;
      while(l<r){
		int mid=(l+r)>>1;
		if(a[mid]>= k){
			r=mid;
		}
		else {
			l=mid+1;
		} 
	}
      if(a[l]!=k){
          cout<<"-1"<<" "<<"-1"<<endl;
          continue;
      }
      cout<<l<<" ";
      l=0,r=n-1;
      while(l<r){
		int mid=(l+r+1)>>1;
		if(a[mid]<=k){
			l=mid;
		}
		else {
			r=mid-1;
		} 
	}
      cout<<r<<endl;
   }
    return 0;
}

数的三次方根

#include<iostream>
#include<cstdio>
#include<algorithm> 
using namespace std;
int main(){
   double n;
   cin>>n;
       double l=-10000;
       double r=10000;
           while(r-l>0.0000001){
             double  mid=(l+r)/2;
               if(mid*mid*mid<=n){
                   l=mid;
               }
               else{
                   r=mid;
               }
           }
      printf("%.6lf",l);
  
    return 0;
}

X星球的翻译官

#include<iostream>
#include<cstdio>
#include<algorithm> 
#include<map>
#include<string>
using namespace std;
int main(){
   int n,m;
   cin>>n>>m;
   map<string,string>mp;
   string s,a,d;
   for(int i=1;i<=n;i++){
       cin>>s>>a;
       mp[s]=a;
   }
  for(int i=1;i<=m;i++){
      cin>>d;
      if(mp.count(d)==1){
          cout<<mp[d];
      }
      else{
          int len=d.size();
          for(int j=0;j<len;j++){
              cout<<"*";
          }
      }
      cout<<" ";
  }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
D2D资源分配是指在D2D通信中,将可用的资源(如频带、传输功率等)分配给不同的用户,并实现最优的通信效果。Matlab代码可以实现D2D资源分配算法的优化和模拟。其中,优化算法通常包括贪心算法、最大权重匹配算法、分簇算法等。以下是一种D2D资源分配算法的Matlab代码示例: %定义初始变量 K = 10; %用户数量 I = 20; %D2D传输功率限制 N = 5; %资源数量 h = randn(K,K); %用户之间的信道增益 %初始化变量 alpha = 0.5; beta = 1 - alpha; d = zeros(K,K); %用户间距离矩阵 f = zeros(K,K); %用户之间的距离函数 P = zeros(K,K); %用户之间的D2D传输功率 %计算用户间距离 for i = 1:K for j = 1:K d(i,j) = sqrt((i-j)^2); end end %计算用户之间的距离函数 for i = 1:K for j = 1:K f(i,j) = alpha*h(i,j) - beta*d(i,j); end end %最大权重匹配算法,实现资源分配 [matching,~,~] = minCostMatching(f); %该函数实现最大权重匹配算法 %根据匹配结果计算用户之间的传输功率 for i = 1:K for j = i+1:K if matching(i) == j P(i,j) = I * exp(-1*h(i,j)); elseif matching(j) == i P(j,i) = I * exp(-1*h(j,i)); end end end %绘制用户之间的传输功率分布图 imagesc(P); colorbar; xlabel('User ID'); ylabel('User ID'); title('D2D Resource Allocation'); 以上代码实现了针对最大权重匹配算法D2D资源分配,并通过图片展示出不同用户间的传输功率分布情况。当然,还可以针对不同情况进行优化算法的调整,实现更优化的D2D资源分配效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值