AtCoder Beginner Contest 159 A~~D
A.
水题
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
if(n<=1&&m<=1){
cout<<"0"<<endl;
}else{
int res = n*(n-1)/2;
int ans = m*(m-1)/2;
cout<<res+ans<<endl;
}
return 0;
}
B
水题
#include<bits/stdc++.h>
using namespace std;
int l;
bool judge( string & s){
string temp = s;
reverse(temp.begin(),temp.end());
return temp == s;
}
int main(){
string ss;
cin>>ss;
string a="";
string b="";
l = ss.length();
for(int i=0;i<(l-1)/2;i++){
a+=ss[i];
}
for(int i=(l+3)/2-1;i<l;i++){
b+=ss[i];
}
if(judge(ss)){
if(judge(a)&&judge(b)){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
else{
cout<<"No"<<endl;
}
return 0;
}
C
水题
#include<bits/stdc++.h>
using namespace std;
int main(){
double n;
cin>>n;
printf("%.12lf",(n/3)*(n/3)*(n/3));
return 0;
}
D
暴力会超时。
TL代码~
#include<bits/stdc++.h>
#define maxn 200005
using namespace std;
int a[maxn];
int num[maxn]={0};
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
num[a[i]]++;
}
int ans;
for(int i=1;i<=n;i++){
num[a[i]]--;
ans = 0;
for(int i=1;i<maxn;i++){
if(num[i]>=2){
ans += num[i]*(num[i]-1)/2;
}
}
cout<<ans<<endl;
num[a[i]]++;
}
return 0;
}
大佬AC代码
#include <bits/stdc++.h>
#define maxn 200005
using namespace std;
typedef long long ll;
map<ll,ll> mp;
ll a[maxn];
vector<ll> v;
int main(){
int n;
cin >>n;
ll sum=0,ans=0;
for(int i=0;i<n;i++) cin >>a[i],mp[a[i]]++;
for(auto x : mp){
ll res=x.second;
if(res>=2) sum+=res*(res-1)/2,v.push_back(res);
}
for(int i=0;i<n;i++){
ll x=a[i];
if(mp[x]>=2){
ll res=mp[x];
cout <<sum-res*(res-1)/2+(res-1)*(res-2)/2<<endl;
}
else
cout <<sum<<endl;
}
}