B
//在线编译器acwing爆炸,遂止步于此题
//本题7靠打表
//9得分析,拆乘和组合撑起来是9的倍数
//答案还提供了一个脑经急转弯,发现样例三出现所以情况,那么搞7这个阶乘以下去算
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int cnt=1;
void solve(){
int n,k;
cin>>n>>k;
//cout<<cnt++<<":";
cout<<1<<" ";
if(k%3==0||n>=3){//3的倍数
cout<<3<<" ";
}
if(k%5==0){//5的倍数
cout<<5<<" ";
}
if(k%7==0||n>=3){//6的倍数
cout<<7<<" ";
}
if(k%9==0||k%3==0&&n>=3||n>=6){//要么是被9整除,要么采用拆分法,保证
//出现的次数是9的倍数
cout<<9<<" ";
}
cout<<"\n";
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--){
solve();
}
}
C
//我是春竹,小帅哥提醒记录左右最大最小就可
//因为,-1和1这样子组成的数肯定是连续,不会跳的
//乱搞:零点和奇点的左右;包含某点的最大区间(转化为连续求最大,见#),不包含某点的最大区间(单独区块,利用线性遍历,然后记录最大值和最小值,详细见*);
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
ll n;
cin>>n;
vector<ll> vc(n+1);
ll l_max=0,r_max=0;
ll ll_max=0,ll_min=0,rr_max=0,rr_min=0;
ll l_min=0,r_min=0;
ll l_sum=0,r_sum=0;
ll biaoji=0;
for(ll i=1;i<=n;i++){
cin>>vc[i];
if(vc[i]!=1&&vc[i]!=-1)
biaoji=i;
}
for(ll i=biaoji-1;i>=1;i--){
l_sum+=vc[i];
l_min=min(l_min,l_sum);#
l_max=max(l_max,l_sum);#
ll_min=min(ll_min,min(l_sum-l_max,l_sum));*
ll_max=max(ll_max,max(l_sum-l_min,l_sum));*
}
for(ll i=biaoji+1;i<=n;i++){
r_sum+=vc[i];
r_min=min(r_min,r_sum);#
r_max=max(r_max,r_sum);#
rr_min=min(rr_min,min(r_sum-r_max,r_sum));*
rr_max=max(rr_max,max(r_sum-r_min,r_sum));*
}
vector<ll> ans;
if(vc[biaoji]>0){
for(ll i=vc[biaoji];i<=max(max(vc[biaoji]+l_max+r_max,vc[biaoji]),max((vc[biaoji]+l_max),(vc[biaoji]+r_max)));i++){
ans.emplace_back(i);
}
for(ll i=vc[biaoji];i>=min(vc[biaoji]+l_min+r_min,min(vc[biaoji]+l_min,vc[biaoji]+r_min));i--){
ans.emplace_back(i);
}
}else{
for(ll i=vc[biaoji];i>=min(min(vc[biaoji]+l_min+r_min,vc[biaoji]),min((vc[biaoji]+l_min),(vc[biaoji]+r_min)));i--){
ans.emplace_back(i);
}
for(ll i=vc[biaoji];i<=max(vc[biaoji]+l_max+r_max,max(vc[biaoji]+l_max,vc[biaoji]+r_max));i++){
ans.emplace_back(i);
}
}
for(ll i=0;i<=max(rr_max,ll_max);i++){
ans.emplace_back(i);
}
for(ll i=0;i>=min(ll_min,rr_min);i--){
ans.emplace_back(i);
}
sort(ans.begin(),ans.end());
ans.erase(unique(ans.begin(),ans.end()),ans.end());
cout<<ans.size()<<"\n";
for(auto i:ans){
cout<<i<<" ";
}
cout<<"\n";
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
}
B
//前缀和优化快速查找符合个数;
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
void solve(){
int n;
cin >> n;
vector<pii> edge(n);
int max_r = 0;
for(int i = 0; i < n; i++){
cin >> edge[i].first >> edge[i].second;
max_r = max(max_r, edge[i].second);
}
vector<int> count(max_r + 1, 0);
for(int i = 0; i < n; i++){
if(edge[i].first == edge[i].second){
int v = edge[i].first;
count[v]++;
}
}
vector<int> unique_(max_r + 1, 0);
for(int v = 1; v <= max_r; v++){
unique_[v] = (count[v] == 0) ? 1 : 0;
}
vector<int> pre_unique_(max_r + 1, 0);
for(int v = 1; v <= max_r; v++){
pre_unique_[v] = pre_unique_[v-1] + unique_[v];
}
string res = "";
for(int i = 0; i < n; i++){
int l = edge[i].first;
int r = edge[i].second;
if(l == r){
if(count[l] == 1){
res += '1';
}
else{
res += '0';
}
}
else{
int available = 0;
if(l > 1){
available = pre_unique_[r] - pre_unique_[l-1];
}
else{
available = pre_unique_[r];
}
res += (available >= 1) ? '1' : '0';
}
}
cout << res << "\n";
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int t;
cin >> t;
while(t--){
solve();
}
}
C
// Problem: C. Bewitching Stargazer
// Contest: Codeforces - Good Bye 2024: 2025 is NEAR
// URL: https://codeforces.com/contest/2053/problem/C
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
//应该注意到二分后区间的变化,如果是不论是奇数还是偶数,二分后产生两个的区间大小都是一样大的,所以同时产生贡献或者不。
//其次就是对称性,区间对称性意味着产生贡献是中数的两倍;连续的数中位数等于平均数
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
ll n,k;
cin>>n>>k;
ll cnt=0;
ll biaoji=1;
ll avg=(n+1);
while(n>=k){
if(n&1){
cnt+=biaoji;
}
biaoji<<=1;
n>>=1;
}
cout<<avg*cnt/2<<"\n";//除以2放在后面防止小数
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
}
B
// Problem: Binary Path
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/CF1937B
// Memory Limit: 250 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
//只有一次转方向,那么贪心的寻找最先出现的基点就可以。最恶心的是找方案数,要类比方案数,然后处理边界问题
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;
cin>>n;
string a[2];
cin>>a[0]>>a[1];
int ii=0;
string ans;
int cnt=1;
for(;ii<n;ii++){
if(ii+1<n&&a[0][ii+1]>a[1][ii]){
ans+=a[0][ii];
break;
}else if(ii==n-1){
ans+=a[0][ii];
break;
}else{
ans+=a[0][ii];
}
}
int ok=ii;
for(;ii<n;ii++)
{
ans+=a[1][ii];
}
//cout<<ok<<"\n";
ok--;
while(ok>=0&&a[0][ok+1]==a[1][ok]){
cnt++;
ok--;
}
cout<<ans<<"\n"<<cnt<<"\n";
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
}
B
//构造后缀mmin,然后模拟切法使得不大于mmin,并且最均匀(分析过程是模拟切后对数组的贡献)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
int n;
cin>>n;
vector<int> arr(n+1);
for(int i=1;i<=n;i++) cin>>arr[i];
int mmin=arr[n];
ll cnt=0;
for(int i=n-1;i>=1;i--){
int num=arr[i];
if(num>mmin){
int ceng=ceil(num*1.0/mmin);
cnt+=ceng-1;
mmin=min(mmin,num/ceng);
}
mmin=min(mmin,num);
}
cout<<cnt<<"\n";
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
}
C
//待补,不想写尸山,就是求最合法。输出方案其实只要构造一种,然后最后绕圈
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int t;
cin >> t;
while(t--){
int n, m, k;
cin >> n >> m >> k;
int min_path_length = n + m - 2;
int res = k - min_path_length;
if(res < 0 || res % 2 != 0){
cout << "NO\n";
continue;
}
// 如果存在,输出 "YES" 并构造染色方案
cout << "YES\n";
// 生成水平边的染色方案
for(int i = 1; i <= n; i++){
for(int j = 1; j < m; j++){
if(i == 1){
// 第一行水平边交替染色
cout << ((j % 2 == 1) ? 'R' : 'B') << " ";
}
else{
// 其他行水平边全部染为 'B'
cout << "B ";
}
}
cout << "\n"; // 换行
}
// 判断 (m-1) 是否为偶数,以确定最后一列垂直边的染色模式
bool last_col_even = ((m - 1) % 2 == 0);
// 生成垂直边的染色方案
for(int i = 1; i < n; i++){
for(int j = 1; j <= m; j++){
if(j == m){
// 最后一列垂直边根据 (m-1) 的奇偶性和当前行数染色
if(last_col_even){
cout << ((i % 2 == 1) ? 'R' : 'B') << " ";
}
else{
cout << ((i % 2 == 1) ? 'B' : 'R') << " ";
}
}
else{
// 其他垂直边全部染为 'R'
cout << "R ";
}
}
cout << "\n"; // 换行
}
}
return 0;
}