# B

## 代码

#include<bits/stdc++.h>
using namespace std;
#define IO ios::sync_with_stdio(false),cin.tie(0);
#define ll long long
#define inf 0x3f3f3f3f
const int N=1e5+5;
//set<string>b;
//set<string>::iterator it;
vector<int>a;
int main()
{
IO;
int T,n,m,t,i;
cin>>T;
while(T--)
{
a.clear();
cin>>n>>m;
if(n<m) swap(n,m);
while(m)
{
for(i=1;i<=m;i++)
{
a.push_back(m);
}
t=m;
m=n-m;
n=t;
if(n<m) swap(n,m);
}
cout<<a.size()<<endl;
for(i=0;i<a.size()-1;i++)
{
cout<<a[i]<<" ";
}
cout<<a[a.size()-1]<<endl;
}
return 0;
}



# H

## 思路

1+m*k<=N，

m*k<=N，

m表示符合要求的个数，然后暴力枚举k，算出每个m既可，K过大枚举超时，但是我们可以发现k中间有很多的m都相等，呈线性关系，故可用整除分块优化。

## 代码

#include<iostream>
#define ll long long
using namespace std;
const ll mod=1e9+7;
ll n,k,ans,m,to,now;
int main(){
scanf("%lld%lld",&n,&k);
for(ll i=2;i<=k;i++){
now=i;
m=n/i;
if(m==0)break;
to=min(n/m,k);
i=to;
m%=mod;
to%=mod;
ans=(ans+m*(to-now+1))%mod;
//printf("%lld %lld %lld %lld\n",now,to,ans,i);
}
for(ll i=2;i<=k;i++){
now=i;
m=(n-1)/i;
if(m==0)break;
to=min((n-1)/m,k);
i=to;
m%=mod;
to%=mod;
ans=(ans+m*(to-now+1))%mod;
//printf("%lld %lld %lld i=%lld\n",now,to,ans,i);
}
printf("%lld\n",(ans+k+n-1)%mod);
}


# J

## 代码

#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
long long n,k,ans;
int n, ans[30][30], a[30][30][30];
char s1[222][5], s2[222][5];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%s%s%s", s1[i] + 1, s2[i] + 1, s2[i] + 1);
int T = n;
while (T--) {
for (int i = 1; i <= n; i++) {
int l1 = strlen(s1[i] + 1);
int l2 = strlen(s2[i] + 1);
int c1 = s1[i][1] - 'A';
int c2 = s2[i][1] - 'A';
if (l1 == l2) {
if (s2[i][1] >= 'a') ans[c1][s2[i][1] - 'a'] = 1;
else for (int j = 0; j < 26; j++) ans[c1][j] |= ans[c2][j];
}
else if (l2 >= 3) {
int c3 = s2[i][3] - 'a';         //c3是成员
for (int j = 0; j < 26; j++) {   //j是对象
if (ans[c2][j]) {            //k是第二层对象
for (int k = 0; k < 26; k++) ans[c1][k] |= a[c3][j][k];
}
}
}
else {
int c3 = s1[i][3] - 'a';
for (int j = 0; j < 26; j++) {
if (ans[c1][j]) {
for (int k = 0; k < 26; k++)  a[c3][j][k] |= ans[c2][k];
}
}
}
}
}
for (int i = 0; i < 26; i++) {
printf("%c: ", 'A' + i);
for (int j = 0; j < 26; j++) if (ans[i][j]) printf("%c", 'a' + j);
puts("");
}
return 0;
}



# 一级目录

## 代码

• 点赞
• 评论
• 分享
x

海报分享

扫一扫，分享海报

• 收藏
• 手机看

分享到微信朋友圈

x

扫一扫，手机阅读

• 打赏

打赏

For the brave

你的鼓励将是我创作的最大动力

C币 余额
2C币 4C币 6C币 10C币 20C币 50C币
• 一键三连

点赞Mark关注该博主, 随时了解TA的最新博文
10-24