通师高专科技创新社周赛 Round17

CF12A Super Agent

题目链接

题意

给你一个有字符构成的3*3的矩形,问矩形是否对称

思路

1.矩形需用到二维数组

2.根据题意判断是否满足对称的条件

3.最后输出结果

坑点

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
        char a[3][3];
        int f=0;//用状态进行区分
        for(int i=0;i<3;i++)
        {
                for(int j=0;j<3;j++)
                {
                        cin>>a[i][j];
                }
        }
        for(int i=0;i<3;i++)
        {
                for(int j=0;j<3;j++)
                {
                        if(a[i][j]!=a[3-i-1][3-j-1])
                        {
                                cout<<"NO";
                                return 0;
                                f=1;
                        }
                }
        }
        if(f==0)
        {
                cout<<"YES";
        }
        return 0;
} 

总结

难度简单,简单模拟即可

 CF784B Kids' Riddle

题目链接

题意

给你一个十进制数问转换成十六进制数后占有几个圈

思路

1.首先可利用字符串进行转化

2.根据圈数对应的数进行计数

3.最后输出结果

坑点

代码

#include<bits/stdc++.h>
using namespace std;
char s[1000001];
int main()
{
        int n,v=0;
        cin>>n;
        sprintf(s,"%X",n);
        for(int i=0;i<strlen(s);i++)
        {
                if(s[i]=='0'||s[i]=='4'||s[i]=='6'||s[i]=='9'||s[i]=='A'||s[i]=='D') v++;
                else if(s[i]=='8'||s[i]=='B') v+=2;
        }
        cout<<v<<endl;
        return 0;
}

总结

难度简单,用字符串模拟,输出结果即可

 CF9C Hexadecimal's Numbers

题目链接

题意

给你一个数问从0-这个数,中有几个数包含0或者1

思路

1.找到数的范围内存在的满足条件的数量

2.根据规律进行搜索

3.利用函数输出结果

坑点

代码

#include<stdio.h>
int n,res;
void dfs(int x)
{
    if(x>n) return ; //大于n就结束
    res++; //累加答案
    dfs(x*10);
    dfs(x*10+1); //向下扩展
    return ;
}
int main()
{
    scanf("%d",&n);
    dfs(1); //从第一个成立的数字1开始
    printf("%d\n",res);
    return 0;
}

总结 

难度中等,找到搜索的规律为关键

 CF976B Lara Croft and the New Game

题目链接

题意

给你n*m的矩阵,问第k步时所在的位置是哪里

思路

1.首先,走的规律是s型

2.根据走型找到未知的规律

3.最后输出位置

坑点

代码

#include <bits/stdc++.h>
long long n,m,k;
int main() {
    scanf("%lld %lld %lld",&n,&m,&k);
        if(k<n)
        {
                printf("%lld %d",k+1,1);
        }
        else 
        {
                k-=n;printf("%lld ",n-k/(m-1));
                if(k/(m-1)&1)
                {
                        printf("%lld",m-k%(m-1));
                }
                else
                {
                        printf("%lld",k%(m-1)+2);
                } 
        }
        return 0;
}

总结

难度中等,规律较难发现

 CF276C Little Girl and Maximum Sum

题目链接

题意

给你n个数字,q次询问,让你对数组的数重新排列,问询问的总和最大为多少

思路

1.首先将数组进行从小到大排序

2.将询问的范围进行从小到大排序

3.排好序之后进行相加

坑点

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[200100],d[200100],l,r;
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];      //输入数值
	}
	for(int i=1;i<=m;i++){
		cin>>l>>r;      //输入查询范围,
		d[l]++;
		d[r+1]--;   	 //并进行差分来求得每个位置的数的询问次数。
	}
	for(int i=1;i<=n;i++){
		d[i]+=d[i-1];  	 //前缀和辅助差分的实现
	}
	sort(d+1,d+n+1);	 //将数值进行排序
	sort(a+1,a+n+1);	 //将询问次数进行排序
	int ans=0;
	for(int i=1;i<=n;i++){
		ans+=a[i]*d[i]; //此时已经是顺序排列了,求出来的值自然就是最大值了
	}
	cout<<ans<<endl;
	return 0;
}

总结 

难度较难,需考虑的因素较多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值