第十五届计算机应用大赛程序设计竞赛(个人)
先晒排名
难度评价仅表示在该比赛中的相对难度
A 二进制?十进制!(简单)
二进制、模拟 使用移位运算和按位与拆解成0、1,再拼接成十进制
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define l first
#define r second
int solve(){
int a,b;cin>>a>>b;
int aa=0,bb=0;
stack<int> sa,sb;
while(a){
if(a&1){
sa.push(1);
}
else{
sa.push(0);
}
a>>=1;
}
while(b){
if(b&1){
sb.push(1);
}
else{
sb.push(0);
}
b>>=1;
}
while(!sa.empty()){
aa*=10;
aa+=sa.top();
sa.pop();
}
while(!sb.empty()){
bb*=10;
bb+=sb.top();
sb.pop();
}
cout<<aa+bb<<endl;
return 0;
}
signed main(){
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}
B 矩阵元素定位(签到题)
二位数组 没啥好讲的了,语法题
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define l first
#define r second
int solve(){
int n,m;cin>>n>>m;
vector<vector<int>> a(n+2,vector<int>(m+2,0));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
int x,y;cin>>x>>y;
cout<<a[x][y]<<endl;
return 0;
}
signed main(){
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}
C 奇妙的字符串(简单)
字符串、(STL) 对字符串的处理
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define l first
#define r second
int solve(){
string s,t;
while(cin>>s){
cin>>t;
//cout<<s<<" "<<t<<endl;
string ans="";
for(char c:s){//增强for遍历
ans=c+ans;
}
string ans1="";
for(char c:t){
ans1=c+ans1;
}
//ans+=t;
cout<<ans<<ans1<<endl;
}
return 0;
}
signed main(){
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}
D 张老师组队(偏难)
我的map的key是能力值,value是个数 res计算出组合成t需要的另一个同学的能力值 判断是否存在 如果需要的能力值相同,假设该能力值有x个,则会有x-1+...+2+1个组合情况数,即x*(x-1)/2 如果能力值不同,则两个数相乘就是情况数。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define l first
#define r second
int solve(){
int n,t;cin>>n>>t;
vector<int> a(n+2,0);
map<int,int> mp;
for(int i=1;i<=n;i++){
cin>>a[i];
mp[a[i]]++;
}
int ans=0;
vector<bool> b(n+2,false);
for(auto& [i,j]:mp){
int res=t-i;
if(mp.count(res)){
if(res==i){
ans+=j*(j-1)>>1;
j=0;
}
else{
ans+=mp[res]*j;
mp[res]=0;
j=0;
}
}
}
cout<<ans<<endl;
return 0;
}
signed main(){
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}
E 递归实现排列型枚举(偏难) dfs 我用的不是dfs写的,所以这个代码是冯智桀的 我帮他加点注释
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
void dfs(int len,vector<int>& visited,string& s){
//dfs先写中止条件,避免段错误
if(len>=n){
//打印答案
for(int i=0;i<n;i++){
cout<<s[i]<<' ';
}
cout<<endl;
}
//枚举每一个没用使用的数
for(int i=1;i<=n;i++){
if(visited[i]==0){
//标记为使用了
visited[i]=1;
//拼接答案
s += to_string(i);
dfs(len+1,visited,s);
//递归的归
//重置
visited[i]=0;
s=s.substr(0,s.size()-1);
}
}
return ;
}
signed main(){
cin>>n;
vector<int> a(n,0);
vector<int> visited(n+1,0);
for(int i=0;i<n;i++){
cin>>a[i];
}
string result;
for(int i=1;i<=n;i++){
visited[i]=1;
result += to_string(i);
dfs(1,visited,result);
visited[i]=0;
result=result.substr(0,result.size()-1);
}
return 0;
}
以下是我使用的内置的全排列函数
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define l first
#define r second
int solve(){
int n;cin>>n;
vector<int> a(n+2,0);
for(int i=1;i<=n;i++){
a[i]=i;
}
do{
for(int i=1;i<=n;i++){
cout<<a[i]<<' ';
}cout<<endl;
}while(next_permutation(a.begin()+1,a.end()-1));
return 0;
}
signed main(){
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}
F 两数之和(签到题)
思维 大于2的数-1都不等于1
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define l first
#define r second
int solve(){
int z;cin>>z;
if(z<=2){
cout<<"NO"<<endl;
}
else{
cout<<"YES"<<endl;
cout<<1<<" "<<z-1<<endl;
}
return 0;
}
signed main(){
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}
G 很二的拆分(中等)
数学、二进制性质 对于一个二进制数,第i位等于1,其余位为0,则这个数等于2的i-1次幂 0不属于正整数,则奇数都为-1 偶数拆分二进制位,输出答案
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define l first
#define r second
int solve(){
int n;cin>>n;
if(n&1){
cout<<-1<<endl;
}
else{
stack<int> ans;
int res=1;
while(n){
if(n&1){
ans.push(res);
}
n>>=1;
res<<=1;
}
while(!ans.empty()){
cout<<ans.top()<<" ";
ans.pop();
}cout<<endl;
}
return 0;
}
signed main(){
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}

京公网安备 11010502036488号