Camp Day1 2签到 减法取模逆推 8 gcd

8
1-n k的倍数 比k大 n/k下取整个 爆ll 大数

#include<bits/stdc++.h>
using namespace std;
#define maxn 100000
int ans[maxn],T,n,k;
string num;
bool isprime(int x){
	for(int i=2;i<=sqrt(x);i++){
		if(x%i==0)
			return 0;
	}
	return 1;
}
string num_mul(string a,string b){
  memset(ans,0,sizeof ans);
  num.clear();
  int lena=a.size();
  int lenb=b.size();
  reverse(a.begin(),a.end());
  reverse(b.begin(),b.end());
  for(int i=0;i<lena;i++){
    for(int j=0;j<lenb;j++){  //b的每一位乘a的每一位
      ans[i+j]+=(a[i]-'0')*(b[j]-'0');
    }
  }
  int yu=0; //初始余数为0
  int i;
  int len=lena+lenb-1;  //总长度
  for(i=0;;i++){    //转化
    if(i<len||yu!=0){   //小于总长或者还有余数时 
      yu=ans[i]+yu; 
      ans[i]=yu%10; //数值等于模十
      yu=yu/10;  //余数等于除十
    }else break;   
  }
  while(i--){
    num+=ans[i]+'0';
  }
  return num;
}
string a,b;
int main(){
  cin>>T;
  while(T--){
  	cin>>n>>k;
  	int num=n/k;
  	string ans="1";
  	for(int i=2;i<=num;i++){
  		if(isprime(i))
  			ans=num_mul(ans,to_string(i));
	  }
	cout<<num_mul(ans,to_string(k))<<endl;
  }
  return 0;
  }

在这里插入图片描述
2

#include<bits/stdc++.h>	//保证至少两个fi=0
using namespace std;
const int maxn=2e5+5;
typedef long long ll;

#define mp make_pair
#define fi first
#define se second
#define IO ios::sync_with_stdio(false);cin.tie(0);

ll n,m;
ll a[65],x[maxn],y[maxn],c[maxn];
 
string s[1005],ans,d[1005];
int main(){
	IO;
	map<char,int> mp;
	map<int,char> mp2;
	for(char i='a';i<='z';i++){
		mp[i]=i-'a';
	}
	for(char i='A';i<='Z';i++){
		mp[i]=i-'A'+26;
	}
	for(int i=0;i<=25;i++){
		mp2[i]=(char)(i+'a');
	}
	for(int i=26;i<=51;i++){
		mp2[i]=(char)(i-26+'A');
	}

	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>x[i]>>y[i];
	}
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	
	for(int i=m;i>=1;i--){
		ans="";
		ll lenx=s[x[i]].size(),leny=s[y[i]].size();
		ll k=leny/lenx;
		if(leny%lenx)
			k++;
	//	cout<<k<<endl;
		string key="";
		for(int j=1;j<=k;j++){
			key+=s[x[i]];
		}
	//	cout<<key<<endl;
		ll len=min((ll)key.size(),leny);
	//	cout<<len<<endl;
		for(int j=0;j<len;j++){
		
			c[j]=(mp[s[y[i]][j]]-mp[key[j]]+52)%52;
			
		}
		for(int j=0;j<len;j++){
			s[y[i]][j]=mp2[c[j]];
		}
	
//		cout<<s[y[i]]<<endl;
		
	}
	for(int i=1;i<=n;i++){
		cout<<s[i]<<endl;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值