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;
}
总结
难度较难,需考虑的因素较多