缔造者
3908的超时代码
#include<iostream>
using namespace std;
int main(){
long long n,a[5000050],cnt=0;
long long tmp,tmp1;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-1;i++){
bool flag=0;
for(int j=1;j<=n-i;j++){
if(a[j]>a[j+1]){
cnt++;
flag=1;
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
if(flag==0) break;
}
cout<<cnt;
return 0;
}
3907的超时代码
#include<iostream>
using namespace std;
int main(){
long long n,a[111111],m,cnt=0;
long long tmp;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-1;i++){
bool flag=0;
for(int j=1;j<=n-i;j++){
if(a[j]>a[j+1]){
cnt++;
flag=1;
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
if(flag==0) break;
}
cout<<cnt;
return 0;
}
求解
朱小川在2021-08-16 22:18:11追加了内容
ding
朱小川在2021-08-17 15:40:54追加了内容
d
朱小川在2021-08-18 16:36:06追加了内容
题目描述 Description
新学期,小红学买了n套练习册,每套练习册都有两本,且书名是相同的,不同套练习册书名不同。平时,这2n本练习册都放在书架上。
有一天,小红带了一本练习册去上学。于是书架上还剩2n-1本练习册。已知剩下的这些练习册,问:小红带走的练习册的书名是什么?
输入描述 Input Description
输入的第一行是一个整数n(1≤n≤100)。
接下来共2n-1行,每行是一个由小写英文字母和数字组成的长度不超过100的字符串,表示书架上的一本练习册的名字。
输出描述 Output Description
输出一行,是一个字符串,表示小红带走的练习册。
样例输入 Sample Input
样例输入1: 2 chinese math math 样例输入2: 3 math1 english math2 english math1
样例输出 Sample Output
样例输出1: chinese 样例输出2: math2
中级启示者
这都是归并排序求逆序对啊
给你一个求逆序对的模板
long long f(int l,int r){ //求l~r间的逆序对
if(l==r) return 0; //不存在逆序对
long long ans=0;
long long mid=(l+r)/2;
ans=f(l,mid)+f(mid+1,r);
long long i=l,j=mid+1,pos=l;
while(i<=mid&&j<=r){
if(a[i]>a[j]){
tmp[pos++]=a[j++];
ans+=mid-i+1;
}
else{
tmp[pos++]=a[i++];
}
}
while(i<=mid) tmp[pos++]=a[i++];
while(j<=r) tmp[pos++]=a[j++];
for(int i=l;i<=r;i++) a[i]=tmp[i];
return ans;
}