B题 Mask Allocation
#include<iostream>
#include<cmath>
#include<vector>
#include<cstring>
using namespace std;
int ans[1000001], cnt;
void gcd(int n,int m)
{
if(n<m) swap(n, m);
if(m==0) return;
for(int i=0; i<m; i++) ans[cnt++] = m;
gcd(n - m, m);
}
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
memset(ans, 0, sizeof(ans));
cnt = 0;
scanf("%d%d", &n, &m);
gcd(n, m);
printf("%d\n", cnt);
for(int i=0; i<cnt; i++) printf("%d ", ans[i]);
printf("\n");
}
return 0;
}
D题 Fake News
#include<iosream>
#include<cmath>
int main(){
long long t, n;
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
if(n==1||n==24) printf("Fake news!\n");
else printf("Nobody knows it better than me!\n");
}
}
H题 Dividing
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
const int mod = 1e9 + 7;
long long i, j, n, k, sum;
using namespace std;
void func(long long m) {
for(i=2; i<=m; i=j+1) {
j = min(n/(n/i), k); //n/l求的是他们的商,n/(n/l)同一个商的最大值, i, j相同值的左右范围
sum = (sum + ((j-i+1)%mod) * ((n/i)%mod)%mod) % mod;
}
}
int main()
{
scanf("%lld%lld", &n, &k);
sum = (n + k - 1) % mod;
func(n);
func(n - 1);
printf("%lld\n", sum);
return 0;
}