赞
踩
参赛地址:
第 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*aj
- long 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;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。