#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[1010];
int main(){
cin>>n;
while(n--){
cin>>a;
int cnt=1; //第1个字符肯定要算一个
for(int i=1;i<strlen(a)+1;i++){ //0下标已经统计了,这里从1开始
if(a[i]==a[i-1]){ //当前位置的字符 与 前面的字符 一样
cnt++; //计数+1
}else{
cout<<cnt<<a[i-1];
cnt=1; //当前这个位置的新字符要计数,所以初始化为1
}
}
cout<<endl;
}
return 0;
}
/* Problem: 改写整数
Language: C++ Result: 正确 Time: 2026-05-17 16:29:50
User: admin Problem: 1901 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
const int N=1e6+10;
int n,b[N],k=0,x=0;//b[i]表示第i个数字,k表示数字个数
char a[N];
int main(){
fgets(a,sizeof a,stdin); //输入带空格的字符串
for(int i=0;i<strlen(a);i++){
//x用于拼数
if(a[i]>='0'&&a[i]<='9'){ //当前位置是数字字符
x=x*10+a[i]-'0'; //先将a[i]转数字,然后拼接在x的个位
if(a[i+1]<'0' || a[i+1]>'9'){//后面不是数字,说明一个数字拼接完成,存储到数组中
k++; //数字个数+1
b[k]=x; //存储第k个数字
x=0; //x归0,准备下一次拼接
}
}
}
cout<<k<<endl;
for(int i=1;i<=k;i++) cout<<b[i]<<endl;
return 0;
}
/*
从前往后遍历每个字符
1 当碰到数字字符(该数字字符前面不是数字字符)时,应该开始拼数
2 当前面是数字,当前也是数字,就拼接在前面的数字后面
3 当前是数字,后面不是数字,说明一个数字拼接完成,存储到数组中
*/
/* Problem: 整数提取
Language: C++ Result: 正确 Time: 2026-05-17 16:11:33
User: admin Problem: 1194 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[1010];
int main(){
cin>>a;
for(int i=0;i<strlen(a);i++){
int x=a[i]-'0'; //字符转数字
ans+=x; //数字之和
}
cout<<ans;
return 0;
}
/* Problem: 数字和
Language: C++ Result: 正确 Time: 2026-05-17 15:47:06
User: admin Problem: 1872 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[110];
int main(){
cin>>n;
while(n--){ //n组用例
cin>>a;
//首字母必须大写
if(a[0]>='a'&&a[0]<='z') a[0]-=32;
//其余字母必须小写
for(int i=1;i<strlen(a);i++){
if(a[i]>='A'&&a[i]<='Z') a[i]+=32;
}
cout<<a<<endl;
}
return 0;
}
/* Problem: 整理药名
Language: C++ Result: 正确 Time: 2026-05-17 15:31:28
User: admin Problem: 1659 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
char a[110],b[110];
int main(){
cin>>a>>b;
if(strlen(a)!=strlen(b)){//长度不等
cout<<1;
}else{ //长度相等有三种情况
if(strcmp(a,b)==0){ //完全相同
cout<<2;
}else{ //不完全相同
//先都变成小写,再比较
for(int i=0;i<strlen(a);i++){
if(a[i]>='A'&&a[i]<='Z') a[i]+=32;
}
for(int i=0;i<strlen(b);i++){
if(b[i]>='A'&&b[i]<='Z') b[i]+=32;
}
if(strcmp(a,b)==0){
cout<<3;
}else{
cout<<4;
}
}
}
return 0;
}
/* Problem: 字符串对比
Language: C++ Result: 正确 Time: 2026-05-17 15:19:50
User: admin Problem: 1825 contest_id: 0*/
#include<iostream> //解法3
#include<cstring>
using namespace std;
char a[110];
int main(){
cin>>a;
for(int i=strlen(a)-1,j=0;i>j;i--,j++){ //双指针算法
if(a[i]!=a[j]){
cout<<"no";
return 0;
}
}
cout<<"yes";
return 0;
}
/* Problem: 判断字符串是否为回文
Language: C++ Result: 正确 Time: 2026-05-17 15:06:57
User: admin Problem: 1665 contest_id: 0*/
#include<iostream> //解法2
#include<cstring>
using namespace std;
char a[110],b[110];
int main(){
cin>>a;
for(int i=strlen(a)-1,j=0;i>=0;i--,j++){
b[j]=a[i];
}
if(strcmp(a,b)==0){ //直接调用函数比较两个字符串
cout<<"yes";
}else{
cout<<"no";
}
return 0;
}
/* Problem: 判断字符串是否为回文
Language: C++ Result: 正确 Time: 2026-05-17 14:57:08
User: admin Problem: 1665 contest_id: 0*/
#include<iostream> //解法1
#include<cstring>
using namespace std;
char a[110],b[110];
bool cmp(char a[],char b[]){
for(int i=0;i<strlen(a);i++){
if(a[i]!=b[i]) return false; //只要有某个位置字符不一样,则返回false
}
return true; //循环结束,所有的位置都相同,返回true
}
int main(){
cin>>a;
for(int i=strlen(a)-1,j=0;i>=0;i--,j++){
b[j]=a[i];
}
if(cmp(a,b)){
cout<<"yes";
}else{
cout<<"no";
}
return 0;
}
/* Problem: 判断字符串是否为回文
Language: C++ Result: 正确 Time: 2026-05-17 14:52:32
User: admin Problem: 1665 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b;
int main(){
cin>>a>>b;
if(a<60&&b>=60 || a>=60&&b<60){ //a不及格但b及格;或者 a及格但b不及格
cout<<1;
}else{
cout<<0;
}
return 0;
}
/* Problem: 有一门课不及格的学生
Language: C++ Result: 正确 Time: 2026-05-17 11:08:47
User: admin Problem: 1620 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,ans=0; //计数:ans表示有几门课不及格
int main(){
cin>>a>>b;
if(a<60) //满足条件,则计数+1
ans++; //相当于ans+=1; 也相当于 ans=ans+1;
if(b<60) //满足条件,则计数+1
ans++; //相当于ans+=1; 也相当于 ans=ans+1;
if(ans==1) cout<<1;
else cout<<0;
return 0;
}
/* Problem: 有一门课不及格的学生
Language: C++ Result: 正确 Time: 2026-05-17 11:08:36
User: admin Problem: 1620 contest_id: 0*/
#include<iostream>
#include<iomanip>
using namespace std;
double x,y;
int main(){
cin>>x;
if(x<1){
y=x;
}else if(1<=x&&x<10){
y=2*x-1;
}else if(x>=10){
y=3*x-11;
}
cout<<"y="<<setprecision(2)<<fixed<<y;
return 0;
}
/* Problem: 分段函数求值
Language: C++ Result: 正确 Time: 2026-05-17 10:18:59
User: admin Problem: 1050 contest_id: 0*/
#include<iostream>
using namespace std;
double x,y;
int main(){
cin>>x;
if(x<1){
y=x;
}else if(1<=x&&x<10){
y=2*x-1;
}else if(x>=10){
y=3*x-11;
}
printf("y=%.2lf\n",y);
return 0;
}
/* Problem: 分段函数求值
Language: C++ Result: 正确 Time: 2026-05-17 10:18:46
User: admin Problem: 1050 contest_id: 0*/
#include<iostream>
using namespace std;
double a,b,ans; //ans答案
char c;
int main(){
cin>>a>>b>>c;
if(c=='+'){ //如果是加法
ans=a+b;
}else if(c=='-'){//如果是减法
ans=a-b;
}else if(c=='*'){//乘法
ans=a*b;
}else if(c=='/'){//除法
ans=a/b;
}
printf("%.2lf",ans);
return 0;
}
/*复习一下
基本数据类型:
int 整数类型
long long 长整数
bool 布尔型
char 字符型
double 双精度浮点型
float 单精度浮点型
*/
/* Problem: 计算器
Language: C++ Result: 正确 Time: 2026-05-17 09:54:58
User: admin Problem: 1061 contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0,root;
struct node{//每个节点需要存储节点的值,左孩子的位置,右孩子的位置
char c;
int l,r; //l左孩子的位置,r右孩子的位置
}a[210]; //二叉链表:存储每个节点的信息
void dfs(int x){ //搜索节点x
cout<<a[x].c; //输出子树的根
if(a[x].l) dfs(a[x].l);//左子树存在,则搜索
if(a[x].r) dfs(a[x].r);//右子树存在,则搜索
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
char x,y,z;
cin>>x>>y>>z;
a[x].c=x; //节点的值,把'a'直接存到97号位置, 'b'是98号位置 ....
if(y!='*') a[x].l=y;
if(z!='*') a[x].r=z;
if(i==1) root=x; //存储根节点的编号
}
dfs(root); //前序遍历
return 0;
}
/*
1 存储
2 前序遍历的搜索顺序:根,左子树,右子树
*/
/* Problem: 新二叉树
Language: C++ Result: 正确 Time: 2026-05-16 20:43:57
User: admin Problem: 2696 contest_id: 0*/
#include<iostream>
#include<vector>
using namespace std;
const int N=1e5+10;
int n,ans=0,fa[N],dep[N],tr[N],si[N],mn=1e9;
vector<int> a[N];
int dfs(int x,int f){//当前节点x,x的父节点是f,返回子树x的大小
fa[x]=f; //记录x的父节点
dep[x]=dep[f]+1; //记录x的深度
tr[x]=1; //x算一个
for(int i=0;i<a[x].size();i++){ //搜索x可以到达的点
if(a[x][i]!=f){ //不能搜索x的父
tr[x]+=dfs(a[x][i],x); //继续向下搜索
}
}
return tr[x];
}
int main(){
cin>>n;
for(int i=1;i<n;i++){ //n-1条边
int x,y; cin>>x>>y; //x到y有边
a[x].push_back(y);
a[y].push_back(x); //双向建边
}
dfs(1,0); //任意取1开始搜索,计算每个点的深度和父节点
for(int i=1;i<=n;i++){ //枚举每个点i作为重心,去掉该点后,计算最大连通块大小si[i]
si[i]=n-tr[i]; //去掉子树i的其余节点的数量
for(int j=0;j<a[i].size();j++){//遍历一下i的子树
if(a[i][j]!=fa[i]){ //不能算i的父节点
si[i]=max(si[i],tr[a[i][j]]);
}
}
mn=min(mn,si[i]); //取i的最大连通块大小的最小值
}
for(int i=1;i<=n;i++){
if(si[i]==mn) cout<<i<<" ";
}
return 0;
}
/*
1、枚举每个点i作为重心,去掉该点后,计算最大连通块大小si[i]。
2、找出 si[i]的最小值 mn
3、输出 si的值正好是mn的所有的i
任意找个点1为根搜索,可以求出:
每个节点的深度
每个节点的父节点
每个节点的子树大小 (怎么知道节点i有哪些子树呢?)
只需要搜索一次,然后就可以计算出每个点i去掉后的最大连通块大小
*/
/* Problem: 树的重心
Language: C++ Result: 正确 Time: 2026-05-16 20:18:57
User: admin Problem: 2673 contest_id: 0*/
#include<iostream>
#include<vector>
using namespace std;
const int N=1e5+10;
int n,fa[N],dep[N],ans=0;
vector<int> a[N]; //a[i]存储节点i可以到达的节点编号
void dfs(int x,int f){//当前节点x,x的父节点是f
fa[x]=f; //记录x的父节点
dep[x]=dep[f]+1; //记录x的深度
for(int i=0;i<a[x].size();i++){ //搜索x可以到达的点
if(a[x][i]!=f){ //不能搜索x的父
dfs(a[x][i],x); //继续向下搜索
}
}
}
int main(){
cin>>n;
for(int i=1;i<n;i++){ //n-1条边
int x,y; cin>>x>>y; //x到y有边
a[x].push_back(y);
a[y].push_back(x); //双向建边
}
dfs(1,0); //任意取1开始搜索,计算每个点的深度和父节点
int y=1; //假设深度最大的是1
for(int i=2;i<=n;i++)
if(dep[i]>dep[y]) y=i; //找到最远的编号
dfs(y,0); //以y为根进行搜索
int z=1;
for(int i=2;i<=n;i++)
if(dep[i]>dep[z]) z=i; //y~z这条直径就找到了
int d=dep[z];
if(d%2==0){ //偶数,中心节点的深度是d/2,d/2+1
for(int i=1;i<=d/2-1;i++) z=fa[z];//爬树
cout<<min(z,fa[z])<<' '<<max(z,fa[z]);
}else{//奇数,中心节点深度是d/2+1
for(int i=1;i<=d/2;i++) z=fa[z];//爬树
cout<<z;
}
return 0;
}
/*
1、树的中心一定在直径上:
如果直径长度是偶数,那么只有一个中心点(直径中间)
如果直径长度是奇数,那么有两个中心点 (直径的中间两个)
2、树的直径如何计算?
二次搜索法:
首先,任意取一个节点x进行搜索,找出深度最大的节点(任取一个y)
然后,以y为根进行搜索,找到深度最大的节点z,那么y~z就是直径
在搜索的过程中,标记每个点的深度和父节点
最后,从节点z向上爬树,两种情况:
z的深度d是偶数,中心节点的深度是d/2,d/2+1
z的深度d是奇数,中心节点深度是d/2+1
6
2 1
1 3
3 4
3 5
5 6
*/
/* Problem: 树的中心
Language: C++ Result: 正确 Time: 2026-05-16 19:34:52
User: admin Problem: 2674 contest_id: 0*/
#include<iostream> //LCA:爬树
#include<cstring>
using namespace std;
int n,ans=0,fa[310],q,a[310],v[310];
int main(){
cin>>n;
for(int i=1;i<n;i++) cin>>fa[i];
cin>>q;
while(q--){ //q次询问
int m; cin>>m;
for(int i=1;i<=m;i++) cin>>a[i]; //m个人的编号
for(int i=2;i<=m;i++){ //计算m-1次公共祖先
memset(v,0,sizeof v); //每次标记前,清理
int x=a[i-1]; //计算a[i-1]和a[i]的最近公共祖先
while(1){
v[x]=1; //标记
if(x==0) break; //到达根节点0
x=fa[x]; //爬树,爬到父节点
}
int y=a[i]; //从另外一个节点向上爬
while(v[y]==0) y=fa[y]; //节点没有标记,才能继续爬
a[i]=y; //把 a[i-1]和a[i]的最近公共祖先 存入 a[i]
}
cout<<a[m]<<endl;
}
return 0;
}
/* Problem: ⼯作沟通
Language: C++ Result: 正确 Time: 2026-05-16 18:45:06
User: admin Problem: 4074 contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,ans=0,a[110],b[10010],f[10010];
//f[i]表示走到位置i能够得到的最大得分
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++) cin>>a[i];
for(int i=0;i<n;i++){ //范围:0~n-1
cin>>b[i];
f[i]=-2e9; //状态初始值:极小值
}
f[0]=b[0]; //起始点是0
for(int i=0;i<n;i++){ //从前往后遍历每个点
if(f[i]==-2e9) continue; //这个点不可达,所以也没有必要从该点向下走
for(int j=1;j<=m;j++){ //尝试每个通道
int x=i+a[j]; //位置i可以到达的位置x
if(x<n) f[x]=max(f[x],f[i]+b[x]);
else ans=max(ans,f[i]); //走出去了,通关
}
}
cout<<ans;
return 0;
}
/*
6 2
2 3
1 10000 30 100 30 30
*/
/* Problem: 闯关游戏
Language: C++ Result: 正确 Time: 2026-05-16 18:32:46
User: admin Problem: 4073 contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,ans=0,a[110],b[10010],f[10010];
//f[i]表示走到位置i能够得到的最大得分
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++) cin>>a[i];
for(int i=0;i<n;i++){ //范围:0~n-1
cin>>b[i];
f[i]=-2e9; //状态初始值:极小值
}
f[0]=b[0]; //起始点是0
for(int i=0;i<n;i++){ //从前往后遍历每个点
for(int j=1;j<=m;j++){ //尝试每个通道
int x=i+a[j]; //位置i可以到达的位置x
if(x<n) f[x]=max(f[x],f[i]+b[x]);
else ans=max(ans,f[i]); //走出去了,通关
}
}
cout<<ans;
return 0;
}
/* Problem: 闯关游戏
Language: C++ Result: 正确 Time: 2026-05-16 18:29:08
User: admin Problem: 4073 contest_id: 0*/
#include<iostream>
using namespace std;
int p[10]={128,64,32,16,8,4,2,1},a,b,c,d;
string s;
int main(){
cin>>s;
for(int i=0;i<8;i++){
a+=p[i]*(s[i]-'0');
}
for(int i=8;i<16;i++){
b+=p[i-8]*(s[i]-'0');
}
for(int i=16;i<24;i++){
c+=p[i-16]*(s[i]-'0');
}
for(int i=24;i<32;i++){
d+=p[i-24]*(s[i]-'0');
}
printf("%d.%d.%d.%d",a,b,c,d);
return 0;
}
/*
11000000101010000000000101100111
*/
/* Problem: 进制转换之IP.
Language: C++ Result: 正确 Time: 2026-05-16 17:21:43
User: admin Problem: 1941 contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
string s;
int main(){
while(cin>>s){ //多组数据
ans=0; //注意,答案初始化为0
for(int i=0;s[i]!='B';i++){//拆到礼物,就不用继续了
if(s[i]=='(') ans++;
if(s[i]==')') ans--;
}
cout<<ans<<endl;
}
return 0;
}
/* Problem: 恶搞指数.
Language: C++ Result: 正确 Time: 2026-05-16 16:59:33
User: admin Problem: 1511 contest_id: 0*/
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,ans=0;
string s[30]; //字符串数组
struct node{
int v,cnt; //v表示数值,cnt表示v的个数
}a[300]; //颜色是0~255
bool cmp(node n1,node n2){
if(n1.cnt==n2.cnt) return n1.v<n2.v; //数量相同,则数值小的排前面
return n1.cnt>n2.cnt; //数量多的排前面
}
int ctoi(char c){//字符'0'~'9','A'~'F' 转数字
if(c<='9') return c-'0';
else return c-'A'+10;
}
char itoc(int x){ //数字0~15 转 字符
if(x<=9) return x+'0';
else return x+'A'-10;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i]; //输入第i行:一个字符串
for(int j=0;j<s[i].size();j+=2){//每两位代表一个颜色
int x=ctoi(s[i][j])*16+ctoi(s[i][j+1]); //两位的十六进制数字 转 十进制数
a[x].cnt++; //该颜色的个数累加
a[x].v=x; //颜色的数值记录
}
}
sort(a,a+256,cmp); //自定义排序规则
for(int i=0;i<=15;i++){ //把排名前面的16位数字要转成十六进制,并输出
cout<<itoc(a[i].v/16)<<itoc(a[i].v%16);
}
cout<<endl;
for(int i=1;i<=n;i++){//处理第i个字符串,变成16级灰阶
for(int j=0;j<s[i].size();j+=2){ //两位两位的取
int mn=256,mi;//mi是最近的编号,mn是最小的差值
int x=ctoi(s[i][j])*16+ctoi(s[i][j+1]); //两位的十六进制数字 转 十进制数
for(int k=0;k<=15;k++){ //和新的16级灰阶都取一下差值,取最小的差值
int cha=abs(x-a[k].v); //计算差值
if(mn>cha){
mn=cha;
mi=k; //更新颜色编号
}else if(mn==cha&&k<mi){ //如果差值一样,那么取更小的k
mi=k;
}
}
cout<<itoc(mi); //数字 转 字符 ,再输出
}
cout<<endl; //记得每一行输出要换行
}
return 0;
}
/*
1 统计每一种颜色的点的数量(数组下标计数),每个点的颜色都是两位字符(十六进制),所以需要先进制转换为10进制。
2 排序:每一种颜色按照数量排序(从大到小)
3 选前16种作为新的灰阶:把老的颜色 转换为 新的颜色
*/
/* Problem: 图像压缩
Language: C++ Result: 正确 Time: 2026-05-16 16:25:35
User: admin Problem: 4022 contest_id: 0*/
#include<iostream>
using namespace std;
long long T,n,ans=0;
long long change(long long n){//分离数字n,将奇数位进行变化
long long sum=0,w=0;//w表示当前是w位,sum是各位变化后的和
while(n){
w++; //位数+1
int g=n%10; //取出个位
n/=10; //抹掉个位
if(w%2==0){ //偶数位,直接累加到sum
sum+=g;
continue;
}
g*=7; //奇数位,则先乘以7
while(g>=10){
g=g%10+g/10; //个位+十位
}
sum+=g; //奇数位的变化结果,累加到sum
}
return sum;
}
int main(){
cin>>T;
while(T--){//T组用栗
cin>>n;
long long m=change(n);//1、分离数字n,将奇数位进行变化。
if(m%8==0) printf("T\n");
else printf("F\n");
}
return 0;
}
/*
1、分离数字n,将奇数位进行变化。
2、在变化过程中,将变化后的数字每一位加起来,判断是否是8的倍数。
*/
/* Problem: 幸运数
Language: C++ Result: 正确 Time: 2026-05-16 15:39:00
User: admin Problem: 4028 contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,ans=0,a[100010],b[100010];
//a[i]表示第一组里面有多少个i,b[i]表示第二组里面有多少个i
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x; cin>>x;
a[x]++; //x有多少个:计数
}
for(int j=1;j<=m;j++){
int x; cin>>x;
b[x]++; //x有多少个:计数
}
for(int i=1;i<=100000;i++){
ans+=min(a[i],b[i]); //取个数较小的那个数量
}
cout<<ans*2;
return 0;
}
/*
一、与数字的顺序无关:
上面有数字,如果下面也有,那么一定会消掉
二、只与某个数字的个数有关 (显然:数组下标计数)
上面x有5个,下面x有4个,会消掉4*2个,也就是
上面x有a个,下面x有b个,会消掉min(a,b)个
*/
/* Problem: 爬虫消消乐
Language: C++ Result: 正确 Time: 2026-05-16 15:12:07
User: admin Problem: 2310 contest_id: 0*/
#include <iostream>
using namespace std;
int a,b,c,sum;
int main(){
cin>>a>>b>>c;
cout<<(a/c)*(b/c)<<endl;//长a需要多少个c,宽b需要多少个c
}
/* Problem: 积木搭建.
Language: C++ Result: 正确 Time: 2026-05-16 14:35:48
User: admin Problem: 1949 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1;i<=n-1;i++){ //第i行
for(int j=1;j<=2*n-1;j++){ //第i行的第j列
if(i+j==n+1 || j-i==n-1) cout<<"*";//根据规律
else cout<<" ";//其余位置是空格
}
cout<<endl; //每行结束,记得换行
}
for(int j=1;j<=2*n-1;j++) cout<<"*"; //最后一行就是2*n-1个*
return 0;
}
/* Problem: 空心等腰三角形
Language: C++ Result: 正确 Time: 2026-05-16 11:26:42
User: admin Problem: 3747 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){ //第i行
for(int j=1;j<=n;j++){ //第i行的第j列
if(i==j || i+j==n+1) cout<<"X";//对角线上是X
else cout<<" ";//其余位置是空格
}
cout<<endl; //每行结束,记得换行
}
return 0;
}
/* Problem: 放大的X
Language: C++ Result: 正确 Time: 2026-05-16 11:13:17
User: admin Problem: 3754 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=n;i>=1;i-=2){//上面是一个倒三角形,从上往下看是第n行,第n-2行,...,第1行
//第i行有i个*,所以有n-i个空格,所以*的前面有(n-i)/2个空格
int g=(n-i)/2;
for(int j=1;j<=g;j++) cout<<" ";//输出g个空格
for(int j=1;j<=i;j++) cout<<"*";//输出i个*
cout<<endl; //每行结束,记得换行
}
for(int i=3;i<=n;i+=2){//下面是一个反的 (注意,第1行和上面的图形共用了,不再重复输出)
//第i行有i个*,所以有n-i个空格,所以*的前面有(n-i)/2个空格
int g=(n-i)/2;
for(int j=1;j<=g;j++) cout<<" ";//输出g个空格
for(int j=1;j<=i;j++) cout<<"*";//输出i个*
cout<<endl; //每行结束,记得换行
}
return 0;
}
/* Problem: 沙漏
Language: C++ Result: 正确 Time: 2026-05-16 11:01:33
User: admin Problem: 3037 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
cin>>n;
n=n/2+1; //可以理解成:上面n行,下面n行,最中间可以共用1行
for(int i=n;i>=1;i--){ //上面是一个倒三角形,从上往下看是第n行,第n-1行,...,第1行
for(int j=1;j<=i;j++){ //第i行正好是i个*号
cout<<"*"; //循环输出i次
}
cout<<endl;//每行结束,记得换行
}
for(int i=2;i<=n;i++){ //下面是一个反的,从上往下看是第2行,...,第n行 (注意,第1行和上面的图形共用了,不再重复输出)
for(int j=1;j<=i;j++){ //第i行正好是i个*号
cout<<"*"; //循环输出i次
}
cout<<endl;//每行结束,记得换行
}
return 0;
}
/* Problem: 蝴蝶结
Language: C++ Result: 正确 Time: 2026-05-16 10:41:50
User: admin Problem: 3750 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){ //枚举第1个乘数,一共有n行
for(int j=1;j<=i;j++){ //枚举第2个乘数,且第二个乘数不能超过第一个乘数
printf("%d*%d=%d ",i,j,i*j); //每个公式后面有一个空格
}
cout<<endl; //每行结束,要换行
}
return 0;
}
/* Problem: 请输出n行的9*9乘法表
Language: C++ Result: 正确 Time: 2026-05-16 10:32:18
User: admin Problem: 3761 contest_id: 0*/
#include <iostream>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){//枚举第一个乘数
for(int j=1;j<=i;j++){//枚举第二个乘数,第二个乘数不能超过第一个乘数
cout<<i<<"*"<<j<<"="<<i*j<<" ";//乘法口诀
}
cout<<endl;
}
}
/* Problem: 请输出n行的9*9乘法表
Language: C++ Result: 正确 Time: 2026-05-16 10:28:24
User: admin Problem: 3761 contest_id: 0*/
#include<iostream> //周期问题:需要发现一来一回是一个大周期,里面每三盆是一个小周期
using namespace std;
int m,n;
int main(){
cin>>m>>n;
int z=3*m*2-2; //一个大周期的盆数
n%=z; //只需要计算第一个大周期对应盆的颜色
if(n==0) n=z; //n是该大周期的最后一盆
if(n<=3*m){ //大周期的前半部分,从前往后数
if(n%3==0) cout<<"hong";
if(n%3==1) cout<<"lan";
if(n%3==2) cout<<"huang";
}else{ //大周期的后半部分,从后往前数
if(n%3==0) cout<<"hong";
if(n%3==1) cout<<"huang";
if(n%3==2) cout<<"lan";
}
return 0;
}
/* Problem: 花的颜色
Language: C++ Result: 正确 Time: 2026-05-16 10:23:56
User: admin Problem: 3146 contest_id: 0*/
#include<iostream>
using namespace std;
long long m,n,ans=0;
int main(){
cin>>m>>n;
for(long long i=2;i*i<=m*n;i++){ //枚举队形的长度
long long j=m*n/i; //计算宽度
if(i*j==m*n) ans++; //判断:人数正好
}
cout<<ans-1;
return 0;
}
/* Problem: 队形数量求解
Language: C++ Result: 正确 Time: 2026-05-16 10:01:39
User: admin Problem: 3151 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=2;i<=n;i++){
for(int j=2;j<=n;j++){
for(int z=2;z<=n;z++){
//最朴素的写法,注意判断所有的条件都要满足
if(i+j+z==n && i%2==0 && j%2==0 &&z%2==0 && i<=j && j<=z){
cout<<i<<' '<<j<<' '<<z<<endl;
}
}
}
}
return 0;
}
/* Problem: 种树方案
Language: C++ Result: 正确 Time: 2026-05-16 09:49:56
User: admin Problem: 3175 contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main() {
cin>>n;
for(int i=2;i<=n/3;i+=2){//枚举桃树
for(int j=i;j<=(n-i)/2;j+=2){//枚举梨树,且确保不比桃树少,不比苹果树多
int k=n-i-j;//计算苹果树
cout<<i<<" "<<j<<" "<<k<<endl;
}
}
return 0;
}
/* Problem: 种树方案
Language: C++ Result: 正确 Time: 2026-05-16 09:45:26
User: admin Problem: 3175 contest_id: 0*/
#include<iostream>
using namespace std;
int n,a,b,ans=0;
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n/a;i++){//枚举大碗的数量
int j=(n-i*a)/b; //计算小碗的数量
//钱要正好花光、小碗数量不能为0、数量都必须是偶数
if(j>0&&i*a+j*b==n&&i%2==0&&j%2==0)
cout<<i<<" "<<j<<endl;
}
return 0;
}
/* Problem: 阿凡提的难题
Language: C++ Result: 正确 Time: 2026-05-16 09:38:36
User: admin Problem: 3122 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,ans=0;
int main(){
cin>>a>>b;
for(int i=a;i<=b;i++){//循环:变量i的范围是a~b之间的每个整数
if(i%6==0 || i%8==0){//判断i是6的倍数或8的倍数
ans++; //统计个数(满足条件的数)
}
}
cout<<ans;
return 0;
}
/* Problem: 乐乐的幸运数
Language: C++ Result: 正确 Time: 2026-05-15 20:35:47
User: admin Problem: 1093 contest_id: 0*/
#include<iostream>//解法2
using namespace std;
int n,ans=0;
int main(){
cin>>n;
//尝试n,n-1,n-2...,一直试到有一个数同时被3,5,7整除
for(int i=n;;i--){//循环:变量i的值的取值范围是n,n-1,n-2,......
if(i%3==0 && i%5==0 && i%7==0){//满足条件,则输出答案
cout<<i;
return 0; //结束程序
}
}
return 0;
}
/* Problem: 同时被3、5、7整除的数
Language: C++ Result: 正确 Time: 2026-05-15 20:24:46
User: admin Problem: 1617 contest_id: 0*/
#include<iostream>//解法1
using namespace std;
int n,ans=0;
int main(){
cin>>n;
//尝试n,n-1,n-2...,一直试到有一个数同时被3,5,7整除
for(int i=n;;i--){//循环:变量i的值的取值范围是n,n-1,n-2,......
if(i%3==0 && i%5==0 && i%7==0){//满足条件,则输出答案
cout<<i;
break;//打破循环
}
}
return 0;
}
/* Problem: 同时被3、5、7整除的数
Language: C++ Result: 正确 Time: 2026-05-15 20:24:24
User: admin Problem: 1617 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,ans=0;//ans表示和
int main(){
cin>>a>>b;
for(int i=a;i<=b;i++){//循环:变量i的值的范围是a~b的每个整数
ans+=i; //累加求和
}
cout<<ans;
return 0;
}
/* Problem: 区间求和
Language: C++ Result: 正确 Time: 2026-05-15 20:08:13
User: admin Problem: 1096 contest_id: 0*/
#include<iostream> //解法3
using namespace std;
int n,ans=0;
int main(){
for(int i=1;;i++){
ans+=i;//当ans超过1000的时候,结束循环
if(ans>1000){ //已经满足要求了,输出i,并结束
cout<<i;
return 0; //正常结束程序
}
}
return 0;
}
/* Problem: 求和到第几项
Language: C++ Result: 正确 Time: 2026-05-15 19:55:23
User: admin Problem: 1071 contest_id: 0*/
#include<iostream> //解法2
using namespace std;
int n,ans=0;
int main(){
for(int i=1;;i++){
ans+=i;//当ans超过1000的时候,结束循环
if(ans>1000){ //已经满足要求了,输出i,并结束
cout<<i;
break; //打破循环
}
}
return 0;
}
/* Problem: 求和到第几项
Language: C++ Result: 正确 Time: 2026-05-15 19:54:52
User: admin Problem: 1071 contest_id: 0*/
#include<iostream> //解法1
using namespace std;
int n,ans=0,i;
int main(){
for(i=1;ans<=1000;i++){
ans+=i;//当ans超过1000的时候,结束循环
}
cout<<i-1;
return 0;
}
/* Problem: 求和到第几项
Language: C++ Result: 正确 Time: 2026-05-15 19:53:19
User: admin Problem: 1071 contest_id: 0*/
#include<iostream>
using namespace std;
int n,ji=0,ou=0;
int main(){
cin>>n;
for(int j=1;j<=n;j++){ //循环n次,j的值依次是1 2 3 ... n
if(j%2==1){//j是个奇数
ji+=j;
}else{ //否则,j就是个偶数
ou+=j;
}
}
//cout<<"the sum of odd numbers 1 to "<<n<<" is : "<<ji<<endl;
//cout<<"the sum of even numbers 1 to "<<n<<" is : "<<ou<<endl;
printf("the sum of odd numbers 1 to %d is : %d\n",n,ji); //整数占位符使用
printf("the sum of even numbers 1 to %d is : %d\n",n,ou);
return 0;
}
/* Problem: 奇数偶数的和
Language: C++ Result: 正确 Time: 2026-05-15 19:46:04
User: admin Problem: 1067 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,c;
int main(){
cin>>a;
if(a==6){ //如果第1个数字是6,继续输入第2个数字
cin>>b;
if(b==6){ //如果第2个数字是6,继续输入第3个数字
cin>>c;
if(c==6){ //如果第3个数字也是6
cout<<1000;
}else{
cout<<100;
}
}else{
cout<<10;
}
}else{
cout<<0;
}
return 0;
}
/* Problem: 促销骰子.
Language: C++ Result: 正确 Time: 2026-05-15 13:06:39
User: admin Problem: 2008 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int l[N], r[N];//如题
int d[N];//d[i] 表示以 i 为根,子树的深度
bool full[N], comp[N];
//full[i] 表示以 i 为根,子树是否是满二叉树
//comp[i] 表示以 i 为根,子树是否是完全二叉树
void dfs(int root){
//初始化子节点的属性
int ln = l[root], rn = r[root];
if(ln) dfs(ln);
if(rn) dfs(rn);
//计算深度
d[root] = max(d[ln], d[rn]) + 1;
//判断满二叉树
if(full[ln] && full[rn] && d[ln] == d[rn]) full[root] = 1;
//判断完全二叉树
if(full[ln] && comp[rn] && d[ln] == d[rn]) comp[root] = 1;
if(comp[ln] && full[rn] && d[ln] - 1 == d[rn]) comp[root] = 1;
}
int main(){
int n;
cin >>n;
for(int i=1; i<=n; i++)
cin >>l[i] >>r[i];
//空子树可以看作一个深度为 0 的满二叉树(完全二叉树)
d[0] = 0;
comp[0] = 1;
full[0] = 1;
//DFS 遍历树
dfs(1);
//统计答案
int ans = 0;
for(int i=1; i<=n; i++)
ans += comp[i];
cout <<ans <<endl;
return 0;
}
/* Problem: 完全二叉树
Language: C++ Result: 正确 Time: 2026-05-14 09:31:14
User: admin Problem: 4859 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e5+5;
ll c[N],n;
vector<ll> child[N];
ll dfs(ll root){
if(child[root].empty()) return c[root];
ll childcost = 0;
for(ll v : child[root]) childcost += dfs(v);
return min(childcost,c[root]);
}
int main(){
cin >> n;
for(ll i=2;i<=n;i++){
ll fa;
cin >> fa;
child[fa].push_back(i);
}
for(ll i=1;i<=n;i++) cin >> c[i];
cout << dfs(1);
return 0;
}
/* Problem: 路径覆盖
Language: C++ Result: 正确 Time: 2026-05-14 09:09:56
User: admin Problem: 4821 contest_id: 0*/
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10;
int n;
int a[N], b[N];
LL f[N];
int main()
{
cin >> n;
for (int i = 1; i <= n; ++ i )
cin >> a[i];
for (int i = 1; i <= n; ++ i )
cin >> b[i];
for (int i = n; i; -- i )
f[i] = max(f[i + 1], a[i] + f[i + max(1, b[i])]);
cout << f[1] << endl;
return 0;
}
/* Problem: 选数
Language: C++ Result: 正确 Time: 2026-05-13 19:13:35
User: admin Problem: 4858 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1000100],b[1000100],f[1000100];
int main(){
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1;i<=n;++i) cin>>b[i];
for(int i=n;i;i--){
if(b[i]==0){//注意要特判一下为0的情况
f[i]=f[i+1]+a[i];
continue;
}
f[i]=max(f[i+b[i]]+a[i],f[i+1]);
}
cout<<f[1];
return 0;
}
/* Problem: 选数
Language: C++ Result: 正确 Time: 2026-05-13 19:11:42
User: admin Problem: 4858 contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,dp[250005],a[505],c[505],ansmax,inf=1e9;
signed main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i]>>c[i],ansmax+=a[i];
for(int i=1;i<=ansmax;i++) dp[i]=inf;//初始化为极大值
for(int i=1;i<=n;i++)
for(int j=ansmax;j>=a[i];j--)
dp[j]=min(dp[j],dp[j-a[i]]+c[i]);
for(int i=ansmax;i>=0;i--)
if(k>=dp[i])
return cout<<i,0;
return 0;
}
/* Problem: 道具商店
Language: C++ Result: 正确 Time: 2026-05-13 18:47:07
User: admin Problem: 4822 contest_id: 0*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 5e2+5;
const int MAXS = 3e5+5;
int n,k,f[MAXS],a[MAXN],c[MAXN],s;
signed main(){
memset(f,0x7f,sizeof(f));
f[0] = 0;
cin>>n>>k;
for(int i = 1;i <= n;i++){
cin>>a[i]>>c[i];
s += a[i];
}
for(int i = 1;i <= n;i++){
for(int j = s;j >= a[i];j--){
f[j] = min(f[j],f[j-a[i]]+c[i]);
}
}
for(int i = s;i >= 0;i--){
if(f[i] <= k){
cout<<i<<endl;
break;
}
}
return 0;
}
/* Problem: 道具商店
Language: C++ Result: 正确 Time: 2026-05-13 18:46:23
User: admin Problem: 4822 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
int n,m,x,ans;
map<int,int> w;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
w[x]++;
}
for(int i=1;i<=m;i++){
cin>>x;
if(w[x]) ans++;
}
cout<<ans<<endl;
return 0;
}
/* Problem: 找数
Language: C++ Result: 正确 Time: 2026-05-13 14:08:52
User: admin Problem: 4857 contest_id: 0*/
#include <iostream>
using namespace std;
int l, r;
int main(){
cin >> l >> r;
int res = 0;
for (int i = l; i <= r; ++ i ){
int x = i;
while (x % 2 == 0) x /= 2;
while (x % 5 == 0) x /= 5;
res += x == 1;
}
cout << res << endl;
}
/* Problem: 有限不循环小数
Language: C++ Result: 正确 Time: 2026-05-13 13:48:41
User: admin Problem: 4856 contest_id: 0*/
#include <bits/stdc++.h>
#define int long long
const int N = 1e5 + 5;
const int Mod = 1e9 + 7;
using namespace std;
int n;
int a[N];
bool vis[N];
vector<int> prime;
map<int, vector<int>> cnt;
signed main()
{
for (int i = 2; i * i < N; i++)
{
if (vis[i])
{
continue;
}
prime.push_back(i);
for (int j = i * 2; j * j < N; j += i)
{
vis[j] = 1;
}
}
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
for (int p : prime)
{
int c = 0;
while (a[i] % p == 0)
{
a[i] /= p;
c++;
}
cnt[p].push_back(c);
}
if (a[i] > 1)
{
cnt[a[i]].push_back(1);
}
}
int ans = 0;
for (pair<int, vector<int>> t : cnt)
{
vector<int> vc = t.second;
if (vc.size() < n)
{
ans += min((int)(vc.size()), (int)(n - vc.size()));
}
sort(vc.begin(), vc.end());
int mid = vc[vc.size() / 2];
for (int c : vc)
{
ans += abs(mid - c);
}
}
cout << ans;
return 0;
}
/* Problem: 相等序列
Language: C++ Result: 正确 Time: 2026-05-13 13:41:14
User: admin Problem: 4820 contest_id: 0*/
#include <bits/stdc++.h>
using namespace std;
int n, p[100005];
vector < int > prime;
vector < int > a[100005];
void fjzyz(int x)
{
int t = sqrt(x);
for (int i = 2; i <= t; i++)
{
int cnt = 0;
while (x % i == 0)
{
cnt++;
x /= i;
}
if (p[i] == 0 && cnt > 0) a[i].push_back(cnt);
}
if (x > 1) a[x].push_back(1);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
p[1] = 1;
for (int i = 2; i <= 316; i++)
if (p[i] == 0)
{
for (int j = i * i; j <= 100000; j += i)
p[j] = 1;
}
for (int i = 1; i <= 100000; i++)
if (p[i] == 0) prime.push_back(i);
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
fjzyz(x);
}
int ans = 0;
for (auto i : prime)
if (!a[i].empty())
{
sort(a[i].begin(), a[i].end());
int k = (n + 1) / 2;
k -= n - (int)a[i].size();
for (auto j : a[i])
ans += abs(j - (k >= 0 ? a[i][k - 1] : 0));
ans += (n - a[i].size()) * (k >= 0 ? a[i][k - 1] : 0);
}
cout << ans << '\n';
return 0;
}
/* Problem: 相等序列
Language: C++ Result: 正确 Time: 2026-05-13 13:40:18
User: admin Problem: 4820 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,a[N],p[N][20],ans;
void f(int x){
if(x == 1) return;
unordered_map<int, int> t;
for(int i=2;i*i<=x;i++){
while(x % i == 0){
p[i][++t[i]]++;
x /= i;
}
if(x == 1) return;
}
p[x][++t[x]]++;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
f(a[i]);
}
for(int i=2;i<=1e5;i++){
for(int j=1;j<20;j++){
if(!p[i][j]) break;
ans += min(p[i][j], n - p[i][j]);
}
}
cout<<ans;
return 0;
}
/* Problem: 相等序列
Language: C++ Result: 正确 Time: 2026-05-13 13:38:58
User: admin Problem: 4820 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
int n,a[100000];
bool check(int x){
vector<int> vc;
for(int i = 0; i < n; i++)
if(a[i] > x) vc.push_back(a[i]);
for(int i = 1; i < vc.size(); i += 2)
if(vc[i] != vc[i - 1]) return false;
return true;
}
int main(){
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
int l = 1, r = 100000;
while(l < r){
int mid = (l + r) / 2;
if(check(mid)) r = mid;
else l = mid + 1;
}
cout << l << endl;
return 0;
}
/* Problem: 数字移动
Language: C++ Result: 正确 Time: 2026-05-13 10:46:11
User: admin Problem: 4819 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
int n,a,max1=0,max2=0,ans=0;//max1最大值,max2次大值
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a;
if(a==max1){
ans=max(ans,max2);
max1=0;
max2=0;
}else if(a>max1){
max2=max1;
max1=a;
}else if(a>max2)
max2=a;
}
cout<<ans;
return 0;
}
/* Problem: 数字移动
Language: C++ Result: 正确 Time: 2026-05-13 10:45:01
User: admin Problem: 4819 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[1010],b[1010],c[1010];
int main(){
cin>>n;
while(n--){ //n组用例
cin>>a>>b;
int j=0;
for(int i=0;i<=strlen(a)/2-1;i++,j++) c[j]=a[i];//a的前半部分写入c
for(int i=0;i<strlen(b);i++,j++) c[j]=b[i];//b的每个字符写入c
for(int i=strlen(a)/2;i<strlen(a);i++,j++) c[j]=a[i];//a的后半部分写入c
c[j]='\0'; //设置c的结束符
cout<<c<<endl;
}
return 0;
}
/* Problem: 宝藏密码
Language: C++ Result: 正确 Time: 2026-05-10 17:07:06
User: admin Problem: 1142 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int k;
char a[1010];
int main(){
while(cin>>a>>k){
int len=strlen(a); //计算字符串的长度
k=k%len; //移动k次:本质是移动k%len次(len是字符串的长度)
//分段输出
for(int i=len-k;i<len;i++) cout<<a[i];
for(int i=0;i<len-k;i++) cout<<a[i];
cout<<endl; //多组用例,记得换行
}
return 0;
}
/*
1、移动k次:本质是移动k%len次(len是字符串的长度)
2、可以分段输出:
后面k个字符先输出;然后输出前面len-k个字符
*/
/* Problem: 字符串右移
Language: C++ Result: 正确 Time: 2026-05-10 16:24:34
User: admin Problem: 1135 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[1010],b[1010];
int main(){
cin>>n;
while(n--){ //n组用例
cin>>a>>b;
for(int i=0;i<=strlen(a)/2-1;i++) cout<<a[i];//先输出第一个串a的前半部分
cout<<b;//再输出字符串b
for(int i=strlen(a)/2;i<strlen(a);i++) cout<<a[i];//最后输出第一个串a的后半部分
cout<<endl;
}
return 0;
}
/*
1、先输出第一个串a的前半部分:0 ~ strlen(a)/2-1
2、再输出字符串b
3、最后输出第一个串a的后半部分 strlen(a)/2 ~ strlen(a)-1
*/
/* Problem: 宝藏密码
Language: C++ Result: 正确 Time: 2026-05-10 16:08:02
User: admin Problem: 1142 contest_id: 0*/
#include<iostream> //解法2:可用函数判断大写字母、小写字母、数字字符
#include<cstring>
using namespace std;
int n,x,y,z;
char a[510];
int main(){
cin>>a;
for(int i=0;i<strlen(a);i++){//从下标0开始,遍历a的每个字符
if(isupper(a[i])) x++; //大写字母个数+1
if(islower(a[i])) y++; //小写字母个数+1
if(isdigit(a[i])) z++; //数字字符个数+1
}
cout<<x<<" "<<y<<" "<<z;
return 0;
}
/* Problem: 统计各种字符的个数
Language: C++ Result: 正确 Time: 2026-05-10 16:01:06
User: admin Problem: 1139 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,x,y,z;
char a[510];
int main(){
cin>>a;
for(int i=0;i<strlen(a);i++){//从下标0开始,遍历a的每个字符
if(a[i]>='A'&&a[i]<='Z') x++; //大写字母个数+1
if(a[i]>='a'&&a[i]<='z') y++; //小写字母个数+1
if(a[i]>='0'&&a[i]<='9') z++; //数字字符个数+1
}
cout<<x<<" "<<y<<" "<<z;
return 0;
}
/* Problem: 统计各种字符的个数
Language: C++ Result: 正确 Time: 2026-05-10 15:52:00
User: admin Problem: 1139 contest_id: 0*/
#include<iostream>
using namespace std;
long long n,a,b;
int main(){
cin>>n;
while(n--){//n组用例
cin>>a>>b;
int flag=0; //标记
while(a>0&&b>0){//同时进行数位分离,只要某个数字拆完,那么剩下的位肯定不会进位
if(a%10+b%10>=10){ //拆出来的相同位直接求和,然后比较
cout<<"Hard\n";
flag=1; //表示已经输出了
break;
}
a/=10;b/=10; //抹掉个位
}
if(flag==0) cout<<"Easy\n"; //循环结束,都没有输出过,则输出Easy
}
return 0;
}
/*
同时进行数位分离,这样拆出来的位一定是相同的位,这个时候直接相加求和,只要和>=10则进位
*/
/* Problem: 困难的计算
Language: C++ Result: 正确 Time: 2026-05-10 15:29:23
User: admin Problem: 4282 contest_id: 0*/
#include<iostream>
using namespace std;
int n,d,ans=0;
int main(){
cin>>n>>d;
for(int i=0;i<=n;i++){ //枚举3的个数 i:i的范围0~n
for(int j=0;j<=n;j++){ //枚举2的个数 j:j的范围0~n
int k=d-3*i-j*2;
if(k>=0&&k<=n){ //注意:1的个数k不能是负数 ,且 不能超过n张
ans++;
}
}
}
cout<<ans;
return 0;
}
/*
1、枚举3的个数 i:i的范围0~n
2、枚举2的个数 j:j的范围0~n
3、1的个数 k=d-3*i-j*2
注意:1的个数k不能是负数 ,且 不能超过n张
*/
/* Problem: 卡片
Language: C++ Result: 正确 Time: 2026-05-10 15:18:16
User: admin Problem: 2775 contest_id: 0*/
#include<iostream>//数学题:计算长方体的最小表面积
using namespace std;
int c,n,ans=0;
int main(){
cin>>c;
while(c--){//c个用例
cin>>n;
ans=1e9; //初始化为极大值
for(int i=1;i<=n;i++){
if(n%i==0){//长度i必须是n的因子
for(int j=1;j<=n/i;j++){
if(n%(i*j)==0){ // 宽度j必须是:i*j必须是n的因子
int k=n/i/j; // 直接计算=n/(i*j)
ans=min(ans,i*j*2+i*k*2+j*k*2); //计算表面积最小值
}
}
}
}
cout<<ans<<endl;
}
return 0;
}
/*
如何枚举所有的摆法:
1、长度i:范围是1~n,长度i必须是n的因子
2、宽度j:范围是1~n/i, 宽度j必须是:i*j必须是n的因子
3、高度k: 直接计算=n/(i*j)
*/
/* Problem: 堆积木
Language: C++ Result: 正确 Time: 2026-05-10 15:07:12
User: admin Problem: 1292 contest_id: 0*/
#include <iostream> //知识点:1、计数;2、数位分离
using namespace std;
int a,k,ans=0; //a的第k次出现在哪个数字
//计数:ans表示现在是第几个a
int main(){
cin>>a>>k;
for(int i=1;;i++){
int n=i;//n是临时变量,用于拆数
while(n){
if(n%10==a) ans++; //n的个位是a,那么计数+1
n/=10; //抹掉n的个位
if(ans==k){//刚好到达第k个a
cout<<i<<endl;
return 0; //break只能跳出一层循环,这里不要用break
}
}
}
return 0;
}
/* Problem: 寻找页码.
Language: C++ Result: 正确 Time: 2026-05-10 14:46:15
User: admin Problem: 1926 contest_id: 0*/
#include<iostream>
using namespace std;
int a,b;
int main(){
cin>>a>>b;
int x=a/b; //现在的单价
int y=a/(b-b/4); //原来的单价:b/4是赠送的,原来只能买b-b/4箱
cout<<y-x; //原价-现价
return 0;
}
/* Problem: 促销
Language: C++ Result: 正确 Time: 2026-05-08 13:37:02
User: admin Problem: 4061 contest_id: 0*/
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,k,ans,root,w[N];
vector<int> e[N];
void dfs(int x,int fa,int dep,int p){
ans=max(ans,dep);
for(int to:e[x]){
if(to!=fa&&w[to]==(p^1)){
dfs(to,x,dep+1,p^1);
}
}
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
for(int i=1;i<=n;i++){
dfs(i,0,1,w[i]);
}
cout<<ans;
return 0;
}//暴力搜索也可以通过,数据待加强。
/* Problem: 美丽路径
Language: C++ Result: 正确 Time: 2026-05-06 13:04:21
User: admin Problem: 4336 contest_id: 0*/
#include<iostream>
#include<iomanip>
using namespace std;
int n,k,x,y;
int main(){
cin>>n; //数组输入n个数据
int a[1010];
for(int i=1;i<=n;i++){
cin>>a[i]; //输入数组的每个元素,从1号下标开始
}
cin>>k; //下面有k组求和
for(int i=1;i<=k;i++){
cin>>x>>y; //每一组求和的开始下标x和结束下标y
int sum=0; //初始化:和=0
for(int j=x;j<=y;j++){
sum+=a[j]; //累加求和
}
cout<<sum<<endl; //输出每一组的和
}
return 0;
}
/* Problem: 元素求和
Language: C++ Result: 正确 Time: 2026-05-03 21:14:28
User: admin Problem: 1103 contest_id: 0*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Combo {
int sum, mx, mn, id;
};
bool cmp(const Combo &a, const Combo &b) {
if (a.sum != b.sum) return a.sum < b.sum;
if (a.mx != b.mx) return a.mx < b.mx;
if (a.mn != b.mn) return a.mn < b.mn;
return a.id < b.id;
}
int n, k;
int main() {
cin >> n >> k;
vector<Combo> v(n);
for (int i = 0; i < n; i++) {
v[i].sum = 0;
v[i].mx = -1;
v[i].mn = 1e9;
v[i].id = i + 1;
for (int j = 0; j < k; j++) {
int x;
cin >> x;
v[i].sum += x;
v[i].mx = max(v[i].mx, x);
v[i].mn = min(v[i].mn, x);
}
}
sort(v.begin(), v.end(), cmp);
for (int i = 0; i < n; i++) {
cout << v[i].id;
if (i + 1 < n) cout << " ";
}
cout << endl;
return 0;
}
/* Problem: 礼盒排序
Language: C++ Result: 正确 Time: 2026-04-29 17:40:54
User: admin Problem: 4855 contest_id: 0*/
#include <iostream>
using namespace std;
int n, m;
int h[105][105];
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
cin >> h[i][j];
for(int i = 0; i <= max(n, m) + 1; i++)
h[i][0] = h[0][i] = h[i][m + 1] = h[n + 1][i] = 1e9;
int ans = 0;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++) {
bool ok = true;
for(int i2 = i - 1; i2 <= i + 1; i2++)
for(int j2 = j - 1; j2 <= j + 1; j2++)
if(h[i][j] > h[i2][j2]) {
ok = false;
break;
}
ans += ok;
}
cout << ans;
return 0;
}
/* Problem: 山之谷
Language: C++ Result: 正确 Time: 2026-04-29 17:33:44
User: admin Problem: 4854 contest_id: 0*/
#include <iostream>
#include <cstring>
using namespace std;
int main() {
string s1, s2, s3;
cin >> s1 >> s2 >> s3;
int d = s1[0] - s2[0];
d = (d % 26 + 26) % 26;
for(int i = 0; i < s3.length(); i++) {
int ch = (s3[i] - 'A' + d) % 26;
cout << (char)(ch + 'A');
}
return 0;
}
/* Problem: 凯撒密码
Language: C++ Result: 正确 Time: 2026-04-29 14:54:03
User: admin Problem: 4853 contest_id: 0*/
#include <iostream>
using namespace std;
int n, a[50] = {0}, ans = 0;
int main() {
cin >> n;
for(int i = 1; i <= n; i++) {
int t = i, pos = 0;
while(t) {
a[pos++] = t % 2;
t /= 2;
}
bool ok = true;
for(int i = 0; i < pos; i++)
if(a[i] != a[pos - i - 1]) {
ok = false;
break;
}
ans += ok;
}
cout << ans;
return 0;
}
/* Problem: 二进制回文串
Language: C++ Result: 正确 Time: 2026-04-29 14:41:52
User: admin Problem: 4852 contest_id: 0*/
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(j == 0 || j == n - 1) {
if(i == 0 || i == n - 1)
cout << '+';
else
cout << '|';
} else {
if(i == 0 || i == n - 1)
cout << '-';
else
cout << '*';
}
}
if(i + 1 != n)
cout << endl;
}
return 0;
}
/* Problem: 画画
Language: C++ Result: 正确 Time: 2026-04-29 14:37:52
User: admin Problem: 4851 contest_id: 0*/
#include <iostream>
using namespace std;
int main() {
int l, r, ans = 0;
cin >> l >> r;
for(int i = l; i <= r; i++) {
int c = 0, t = i;
while(t) {
if(t % 10 == 2)
c++;
t /= 10;
}
if(c == 3)
ans++;
}
cout << ans;
return 0;
}
/* Problem: 数数
Language: C++ Result: 正确 Time: 2026-04-29 14:33:57
User: admin Problem: 4850 contest_id: 0*/
#include <string>
#include <iostream>
using namespace std;
int main() { //注意:替换ans中的字符ABCD,不要空格,不要写错了答案顺序
string ans =
"DBBCB"
"CBBBC"
"CBACA"
"BAABB"
"BAAAB";
int no;
cin>>no;
cout<<ans[no - 1];
return 0;
}
/* Problem: 选择题判断题
Language: C++ Result: 正确 Time: 2026-04-29 14:27:57
User: admin Problem: 4847 contest_id: 0*/
#include <string>
#include <iostream>
using namespace std;
int main() { //注意:替换ans中的字符ABCD,不要空格,不要写错了答案顺序
string ans =
"DDBBD"
"BBAAB"
"BCDDC"
"ABABA"
"BABBA";
int no;
cin>>no;
cout<<ans[no - 1];
return 0;
}
/* Problem: 选择题判断题
Language: C++ Result: 正确 Time: 2026-04-29 14:25:42
User: admin Problem: 4846 contest_id: 0*/
#include <string>
#include <iostream>
using namespace std;
int main() { //注意:替换ans中的字符ABCD,不要空格,不要写错了答案顺序
string ans =
"ABCAD"
"BACDB"
"BBCCA"
"BABBA"
"ABABA";
int no;
cin>>no;
cout<<ans[no - 1];
return 0;
}
/* Problem: 选择题判断题
Language: C++ Result: 正确 Time: 2026-04-29 14:23:10
User: admin Problem: 4845 contest_id: 0*/
#include <string>
#include <iostream>
using namespace std;
int main() { //注意:替换ans中的字符ABCD,不要空格,不要写错了答案顺序
string ans =
"DCBAC"
"CBADA"
"BBCBB"
"AABAB"
"AABBB";
int no;
cin>>no;
cout<<ans[no - 1];
return 0;
}
/* Problem: 选择题判断题
Language: C++ Result: 正确 Time: 2026-04-29 14:20:52
User: admin Problem: 4844 contest_id: 0*/
#include <string>
#include <iostream>
using namespace std;
int main() { //注意:替换ans中的字符ABCD,不要空格,不要写错了答案顺序
string ans =
"BBBBA"
"BBBBB"
"BCBBA"
"AABBA"
"BABBB";
int no;
cin>>no;
cout<<ans[no - 1];
return 0;
}
/* Problem: 选择题判断题
Language: C++ Result: 正确 Time: 2026-04-29 14:18:23
User: admin Problem: 4843 contest_id: 0*/
#include <string>
#include <iostream>
using namespace std;
int main() { //注意:替换ans中的字符ABCD,不要空格,不要写错了答案顺序
string ans =
"CBCBD"
"BBDBA"
"BBCAD"
"BBAAA"
"AABBA";
int no;
cin>>no;
cout<<ans[no - 1];
return 0;
}
/* Problem: 选择题判断题
Language: C++ Result: 正确 Time: 2026-04-29 14:15:55
User: admin Problem: 4842 contest_id: 0*/
#include <string>
#include <iostream>
using namespace std;
int main() { //注意:替换ans中的字符ABCD,不要空格,不要写错了答案顺序
string ans =
"BDDCB"
"AACCA"
"BCBAA"
"ABBAA"
"AABBA";
int no;
cin>>no;
cout<<ans[no - 1];
return 0;
}
/* Problem: 选择题判断题
Language: C++ Result: 正确 Time: 2026-04-29 14:13:02
User: admin Problem: 4841 contest_id: 0*/
#include <string>
#include <iostream>
using namespace std;
int main() { //注意:替换ans中的字符ABCD,不要空格,不要写错了答案顺序
string ans =
"BADDA"
"ABDDB"
"BBDBA"
"AABBA"
"AABAB";
int no;
cin>>no;
cout<<ans[no - 1];
return 0;
}
/* Problem: 选择题判断题
Language: C++ Result: 正确 Time: 2026-04-29 14:10:02
User: admin Problem: 4840 contest_id: 0*/
#include<iostream>
using namespace std;
int main(){
int a1,a2,a3,a4,a5;
cin>>a1>>a2>>a3>>a4>>a5;
a1=a1/3;a2=a2+a1;a5=a5+a1;
a2=a2/3;a1=a1+a2;a3=a3+a2;
a3=a3/3;a2=a2+a3;a4=a4+a3;
a4=a4/3;a3=a3+a4;a5=a5+a4;
a5=a5/3;a1=a1+a5;a4=a4+a5;
cout<<a1<<" "<<a2<<" "<<a3<<" "<<a4<<" "<<a5;
return 0;
}
/* Problem: 分糖果2
Language: C++ Result: 正确 Time: 2026-04-29 09:41:33
User: admin Problem: 1037 contest_id: 0*/
# coding=utf-8
import turtle #使用import语句导入海龟画图模块,默认画图的是箭头
turtle.shape('turtle') #将画图设置为小海龟
turtle.forward(100) #前进100步(像素)
turtle.right(90) #右转90度
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.left(90) #左转90度
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
/* Problem: 【python】【非自动判题】画一个日字形
Language: Python Result: 正确 Time: 2026-04-29 08:36:13
User: admin Problem: 2838 contest_id: 0*/
#include <iostream>
using namespace std;
char a;
int main() {
while(cin>>a){
if(a=='4') cout<<8;
else cout<<a;
}
return 0;
}
/* Problem: 数字替换
Language: C++ Result: 正确 Time: 2026-04-27 08:53:38
User: admin Problem: 4849 contest_id: 0*/
#include <iostream>
using namespace std;
int main() {
int a, b = 0, t = 1;
cin >> a;
while(a) {
if(a % 10 == 4)
b += t * 8;
else
b += t * (a % 10);
a /= 10;
t *= 10;
}
cout << b;
return 0;
}
/* Problem: 数字替换
Language: C++ Result: 正确 Time: 2026-04-27 08:49:37
User: admin Problem: 4849 contest_id: 0*/
#include <iostream>
using namespace std;
int main() {
int H1, H2, H3, H4;
cin >> H1 >> H2 >> H3 >> H4;
int ans = H2;//假设H2是答案
int d = H1 - H2;
if (d < 0) d = -d;
int mnd = d;//更新差值最小值
d = H1 - H3;
if (d < 0) d = -d;
if (d < mnd || (d == mnd && H3 < ans)) ans = H3, mnd = d;//更新答案和差值最小值
d = H1 - H4;
if (d < 0) d = -d;
if (d < mnd || (d == mnd && H4 < ans)) ans = H4, mnd = d;//更新答案和差值最小值
cout << ans << endl;//输出答案
return 0;
}
/* Problem: 交朋友
Language: C++ Result: 正确 Time: 2026-04-27 08:47:51
User: admin Problem: 4848 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[1010];
int main(){
cin>>n;
while(n--){
cin>>a;
//遍历字符串a的每一个字符
for(int i=0;i<strlen(a);i++){
if(a[i]>='A'&&a[i]<='Z') a[i]+=32; //先全部变成小写
if(a[i]=='a' || a[i]=='e' || a[i]=='i' || a[i]=='o' || a[i]=='u') a[i]-=32; //元音字母变成小写
}
cout<<a<<endl;
}
return 0;
}
/* Problem: 元音字母转换
Language: C++ Result: 正确 Time: 2026-04-26 16:26:51
User: admin Problem: 1144 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[1010];
int main(){
cin>>n;
while(n--){
cin>>a;
//遍历字符串a的每一个字符
for(int i=0;i<strlen(a);i+=2){ //下标0和1位置对调,2和3位置对调...
swap(a[i],a[i+1]); //交换相邻两个字符的位置
}
cout<<a<<endl;
}
return 0;
}
/* Problem: 奇偶位互换
Language: C++ Result: 正确 Time: 2026-04-26 16:19:26
User: admin Problem: 1143 contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
char a[1010];
int main(){
cin>>n;
while(n--){
cin>>a;
//遍历字符串a的每一个字符
for(int i=0;a[i];i++){
if(a[i]>='A'&&a[i]<='Z') a[i]+=32; //大写,则变小写
else a[i]-=32; //小写,则变大写
}
cout<<a<<endl;
}
return 0;
}
/* Problem: 大小写互换
Language: C++ Result: 正确 Time: 2026-04-26 16:06:03
User: admin Problem: 1132 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[1010];
int main(){
cin>>n;
while(n--){
cin>>a;
//遍历字符串a的每一个字符
for(int i=0;i<strlen(a);i++){
if(a[i]>='A'&&a[i]<='Z') a[i]+=32; //大写,则变小写
else a[i]-=32; //小写,则变大写
}
cout<<a<<endl;
}
return 0;
}
/* Problem: 大小写互换
Language: C++ Result: 正确 Time: 2026-04-26 16:05:14
User: admin Problem: 1132 contest_id: 0*/
#include<iostream>
using namespace std;
char a,b;//定义两个字符
int main(){
cin>>a>>b;
for(char i=a;i<=b;i+=2) cout<<i<<" ";//正向间隔输出
cout<<endl;
for(char i=b;i>=a;i-=2) cout<<i<<" ";//反向间隔输出
cout<<endl;
return 0;
}
/* Problem: 字符正向、反向间隔输出
Language: C++ Result: 正确 Time: 2026-04-26 15:58:10
User: admin Problem: 1126 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[1010];
int main(){
cin>>n;
fgets(a,sizeof(a),stdin); //读入n后面的换行符
while(n--){
fgets(a,sizeof(a),stdin); //读入一个带空格的字符串
cout<<strlen(a)-1<<endl; //减去1:换行符不能算在字符串长度中
}
return 0;
}
/* Problem: 带空格字符串的输入
Language: C++ Result: 正确 Time: 2026-04-26 15:49:24
User: admin Problem: 1129 contest_id: 0*/
#include<iostream>
#include<cstring>
using namespace std;
int n,ans=0;
char a[1010];
int main(){
cin>>a;
int len=strlen(a);
for(int i=len-2;i>=0;i--) cout<<a[i];
return 0;
}
/*
1 计算字符串的长度
2 循环输出
*/
/* Problem: 字符串倒序输出
Language: C++ Result: 正确 Time: 2026-04-26 15:34:34
User: admin Problem: 1130 contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
char a[1010];
int main(){
cin>>a;//输入不带空格的字符串
cout<<a;
return 0;
}
/* Problem: 一串字符
Language: C++ Result: 正确 Time: 2026-04-26 15:28:22
User: admin Problem: 1041 contest_id: 0*/
#include<iostream>
using namespace std;
char c1[100]="Hello Hi";
char c2[50]="Nice to Meet You";
int main(){
cout<<c1<<endl;
cout<<c2<<endl;
cout<<c1[1]<<c1[3]<<c1[5]<<c1[7]<<endl;
cout<<c2[0]<<c2[2]<<c2[4]<<c2[6]<<c2[8]<<endl;
return 0;
}
/* Problem: 字符数组的定义赋值与输出
Language: C++ Result: 正确 Time: 2026-04-26 15:16:41
User: admin Problem: 1127 contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
int x=n-i+1,d=0;
for(int j=1;j<=n;j++){
printf("%3d",x);
if(j==i) d=-1;//第i行从第i列之后,开始-1
x+=d;
}
cout<<endl;
}
return 0;
}
/* Problem: 拐角II
Language: C++ Result: 正确 Time: 2026-04-26 14:55:46
User: admin Problem: 3101 contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
int x=1,d=1;
for(int j=1;j<=n;j++){
printf("%3d",x);
if(x==i) d=0;//当x到达i之后,就不变了
x+=d;
}
cout<<endl;
}
return 0;
}
/* Problem: 拐角I
Language: C++ Result: 正确 Time: 2026-04-26 14:42:28
User: admin Problem: 3100 contest_id: 0*/