参赛地址:
第 5 场 小白入门赛 - 蓝桥云课 (lanqiao.cn)
题目列表:
第一题:是签到题,就不需要解释了
第二题:欢迎参加福建省大学生程序设计竞赛(题目)
主要思路:
就是分类,就是看有多少组,主要用到哈希表,以int为键(a),后面设个动态数组,存放不同的b
如果b在这个数组里能找到,结果不加1,否则,结果加1,加入数组。
#include <iostream>
using namespace std;
#include<map>
#include<vector>
#include<algorithm>
int main()
{int Q;cin>>Q;int a,b;int cnvt=0;map<int,vector<int>>h;while(Q--){cin>>a>>b;if(h[a].size()==0) cnvt++,h[a].push_back(b);else{if (find(h[a].begin(), h[a].end(), b) != h[a].end()){}else{cnvt++;h[a].push_back(b);}}}cout<<cnvt;// 请在此输入您的代码return 0;
}
第三题:匹配二元组的数量【算法赛】
主要思路:
主要就该公式化简,得出 i*ai=j*aj 所以得出判断满足二元组的条件,就是下标与其对应数组的值,因为这个值只和数组的一个状态有关,我们在输入的时候立马改变就可以i*ai
这里要注意一点,要注意到你数组是从0开始储存,还是从1开储存
然后开辟一个数组在存储所有出现的整数(不存在重复),再用哈希表去放置对应的次数
因为是二元组,两两组队,所以每一个的次数为n*(n-1)/2
代码:
#include <iostream>
#include<vector>
#include<map>
using namespace std;
int main()
{ int n;cin>>n;int i,j;long long arr[n];vector<long long >l;map<long ,long >h;for(i=0;i<n;i++){cin>>arr[i];arr[i]=arr[i]*(i+1);h[arr[i]]++;if(h[arr[i]]==1){l.push_back(arr[i]);}}// i*ai ==j*ajlong long cnvt=0;for(auto s:l ){cnvt+=h[s]*(h[s]-1)/2;}cout<<cnvt;return 0;
}
第四题:元素交换【算法赛】
代码:
#include <iostream>
using namespace std;
int a[200010];
int main()
{int n,t1=0,t2=0;cin>>n;for(int i=0;i<2*n;i++){cin>>a[i];if(a[i]==i%2) t1++;else t2++;}cout<<min(t1/2,t2/2);return 0;
}
第五题:
代码:这个不是本人,本人有点了解不了
#include <bits/stdc++.h>
using namespace std;
int main()
{long long n,ans=0;cin>>n;long long t=floor(sqrt(n)),tt=n-t*t;ans=(t-2)*(t-2)*4+4*(t-2)*3+4*2;if(tt>0){ans+=2;tt--;ans+=min(tt,t-1)*4;tt-=t-1;}if(tt>0){ans+=2;tt--;ans+=min(tt,t)*4;tt-=t;}if(tt>0){ans+=2;tt--;ans+=min(tt,t)*4;tt-=t;}if(tt>0){ans+=2;tt--;ans+=min(tt,t+1)*4;tt-=t+1;}cout<<ans;return 0;
}