136 条题解
-
5
2016wudi LV 7 @ 7 年前
string类
-
37 年前@
在sort中的cmp中直接定义水过。。。。。。。
-
26 年前@
只是个结构体排序嘛。。。
sort+cmp+string水过
AC -
27 年前@
最顶上的没有这个格式,不方便,希望顶上去
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;struct node{
char a[25];
char b[10005];
int len;
}shui[1005];int n;
int work(char *x,char *y,int lan){//比较数字大小
for(int i=0;i<lan;i++){
if(x[i]<y[i]) return 2;
if(x[i]>y[i]) return 1;
}
return 0;
}bool work2(char *x,char*y){//比较名字的大小
int lenx=strlen(x);
int leny=strlen(y);
for(int i=0;i<min(lenx,leny);i++){
if(x[i]<y[i]) return true;
if(x[i]>y[i]) return false;
}
if(lenx<leny) return true;
return false;
}bool cmp(node x,node y){//先比较数字长度
if(x.len>y.len) return true;
else if(x.len<y.len) return false;
else{
int aa;
if((aa=work(x.b,y.b,x.len))==1) return true;
else if(aa==2) return false;
else return work2(x.a,y.a);
}
}int main(){
scanf("%d\n",&n);
for(int i=1;i<=n;i++){
scanf("%s\n%s\n",shui[i].a,shui[i].b);
shui[i].len=strlen(shui[i].b);
}
sort(shui+1,shui+n+1,cmp);
for(int i=1;i<=n;i++){
for(int j=0;j<strlen(shui[i].a);j++)
printf("%c",shui[i].a[j]);
printf("\n");
}
return 0;
} -
27 年前@
冒泡轻松过,用字符串,strcmp+strcpy+strlen!!!!!!
-
14 年前@
-
17 年前@
#include<iostream>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define maxa 1000+30
#define inf 10000000
using namespace std;
struct node
{
string id,num;
}e[maxa];
bool comp(node a,node b)
{
int i;
if(a.num==b.num)
{
for(i=0;i<a.id.length()&&i<b.id.length();++i)
if(a.id[i]!=b.id[i])
return a.id[i]<b.id[i];
if(a.id.length()<b.id.length())
return true;
}
else
{
if(a.num.length()!=b.num.length())
return a.num.length()>b.num.length();
else for(i=0;i<a.num.length()&&i<b.num.length();++i)
if(a.num[i]!=b.num[i])
return a.num[i]>b.num[i];
}
return false;
}
int main()
{
int n,i = 0;
cin>>n;
for(i=0;i<n;++i){
cin>>e[i].id>>e[i].num;
}
sort(e,e+n,comp);
for(i=0;i<n;++i)
cout<<e[i].id<<endl;
return 0;
} -
04 年前@
用了自定义排序规则的multimap,第3个测试WA,其它都AC,请教为什么
#include<set>
#include<algorithm>
#include<cstring>
#include <iostream>using namespace std;
struct Up {
char name[20];
unsigned long long n;
};struct Rule {
bool operator()(const Up & u1, const Up & u2) const {
if (u1.n != u2.n) return u1.n > u2.n;
else return (strcmp(u1.name, u2.name) < 0);
}
};int main(void) {
multiset<Up, Rule> ms;
Up u;
int n = 0;scanf("%d", &n);
for (int i = 0; i < n; i++) {
//scanf("%s", u.name);
//getchar();
//scanf("%ll", &u.n);
cin >> u.name >> u.n;
ms.insert(u);
}multiset<Up, Rule>::iterator p;
for (p = ms.begin(); p != ms.end(); p++) {
printf("%s\n", p->name);
}
return 0;
} -
06 年前@
#include <iostream>
#include<string>using std::string;
using std::cin;
using std::cout;
using std::endl;int PARTITION(int p, int r);
void QUICKSORT(int p, int r);string name[10000]; //储存水王ID
unsigned long long totcomments[10000]; //储存水王发帖数int main()
{
int totnum; //水王总数
cin>>totnum;
int nail=0;// 标志,记录读取水王数据
while(nail<totnum)
{
cin>>name[nail];
cin>>totcomments[nail];
nail++;
}
QUICKSORT(0, totnum-1);
for(int i=totnum-1;i>=0;i--)
{
cout<<name[i]<<endl;
}
return 0;
}int PARTITION(int p, int r) //快速排序核心是找到分界点,因此对名字同样进行分解即可
{
unsigned long long tip = totcomments[r];
int i=p-1;
for(int j=p;j<r;j++)
{
if(totcomments[j]<tip)
{
i=i+1;
unsigned long long temp=totcomments[i];
totcomments[i]=totcomments[j];
totcomments[j]=temp;string str=name[i];
name[i]=name[j];
name[j]=str; //同时交换ID
}
else if(totcomments[j] == tip)
{
if(name[j]>name[r])
{
i=i+1;
unsigned long long temp=totcomments[i];
totcomments[i]=totcomments[j];
totcomments[j]=temp;string str=name[i];
name[i]=name[j];
name[j]=str; //发帖数相同,同时交换ID,按字典顺序,注意输出倒序,因此大的ID在前
}
}
}
unsigned long long temp=totcomments[r];
totcomments[r]=totcomments[i+1];
totcomments[i+1]=temp;string str=name[r];
name[r]=name[i+1];
name[i+1]=str; //对姓名进行分界点交换,对发帖数排序同时保证对应ID跟着变化
return i+1;
}void QUICKSORT(int p, int r)
{
if(p<r)
{
int q=PARTITION(p, r);
QUICKSORT(p, q-1);
QUICKSORT(q+1,r);
}
} -
06 年前@
#include <iostream>
#include<string>using std::string;
using std::cin;
using std::cout;
using std::endl;int PARTITION(int p, int r);
void QUICKSORT(int p, int r);string name[5000]; //储存水王ID
unsigned long long totcomments[5000]; //储存水王发帖数int main()
{
int totnum; //水王总数
cin>>totnum;
int nail=0;// 标志,记录读取水王数据
while(nail<totnum)
{
cin>>name[nail];
cin>>totcomments[nail];
nail++;
}
QUICKSORT(0, totnum-1);
for(int i=totnum-1;i>=0;i--)
{
cout<<name[i]<<endl;
}
return 0;
}int PARTITION(int p, int r) //快速排序核心是找到分界点,因此对名字同样进行分解即可
{
unsigned long long tip = totcomments[r];
int i=p-1;
for(int j=p;j<r;j++)
{
if(totcomments[j]<tip)
{
i=i+1;
unsigned long long temp=totcomments[i];
totcomments[i]=totcomments[j];
totcomments[j]=temp;string str=name[i];
name[i]=name[j];
name[j]=str; //同时交换ID
}
else if(totcomments[j] == tip)
{
if(name[j]>name[r])
{
i=i+1;
unsigned long long temp=totcomments[i];
totcomments[i]=totcomments[j];
totcomments[j]=temp;string str=name[i];
name[i]=name[j];
name[j]=str; //发帖数相同,同时交换ID,按字典顺序,注意输出倒序,因此大的ID在前
}
}
}
unsigned long long temp=totcomments[r];
totcomments[r]=totcomments[i+1];
totcomments[i+1]=temp;string str=name[r];
name[r]=name[i+1];
name[i+1]=str; //对姓名进行分界点交换,对发帖数排序同时保证对应ID跟着变化
return i+1;
}void QUICKSORT(int p, int r)
{
if(p<r)
{
int q=PARTITION(p, r);
QUICKSORT(p, q-1);
QUICKSORT(q+1,r);
}
} -
07 年前@
用一个数组优化空间,记录起始位置和长度,冒泡过
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<stdlib.h>
using namespace std;
struct node{
char name[24];
int st,len;
}list[1008];
char s[10008];
int n,a[1008],t[10008];void init(){
cin >> n;
int p=0,k;
for (int i=1;i<=n;i++){
cin >> list[i].name;
cin >> s;
list[i].st=p+1;
k=strlen(s);list[i].len=k;
for (int j=1;j<=k;j++){
t[++p]=s[j-1]-48;
}
}
}bool small(node x,node y){
if(x.len==y.len){
int x1=x.st,y1=y.st;
for (int i=1;i<=x.len;i++,x1++,y1++){
if (t[x1]>t[y1])return false;
else if(t[y1]>t[x1])return true;
}
if (strcmp(x.name,y.name)<0)return false;
else return true;
}
else return (y.len>x.len);
}void sort1(){
for (int i=1;i<=n;i++)a[i]=i;
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++)
if(small(list[a[i]],list[a[j]]))
{int tmp=a[i];a[i]=a[j];a[j]=tmp;}
for (int i=1;i<=n;i++){
cout << list[a[i]].name << endl;
}
}int main(){
init();
sort1();
return 0;
} -
07 年前@
#include<stdio.h>
#include<string.h>
#define N 100000+5
#define ll long long
struct shui
{
char name[20];
char tie[50];
}ren[1005];
int strcmpp(char x[],char y[])
{
int hh;
int lx=strlen(x),ly=strlen(y);
if(lx>ly) hh=1;
else if(ly>lx) hh=-1;
else hh=strcmp(x,y);
return hh;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%s",ren[i].name);
scanf("%s",ren[i].tie);
}
for(int i=1;i<n;++i)
{
for(int j=n;j>i;--j)
{
if(strcmpp(ren[j].tie,ren[j-1].tie)>0)
{
struct shui x;
strcpy(x.name,ren[j].name);strcpy(x.tie,ren[j].tie);
strcpy(ren[j].name,ren[j-1].name);strcpy(ren[j].tie,ren[j-1].tie);
strcpy(ren[j-1].name,x.name);strcpy(ren[j-1].tie,x.tie);
}
else if(strcmpp(ren[j].tie,ren[j-1].tie)==0)
{
if(strcmp(ren[j].name,ren[j-1].name)<0)
{
struct shui x;
strcpy(x.name,ren[j].name);strcpy(x.tie,ren[j].tie);
strcpy(ren[j].name,ren[j-1].name);strcpy(ren[j].tie,ren[j-1].tie);
strcpy(ren[j-1].name,x.name);strcpy(ren[j-1].tie,x.tie);
}
else continue;
}
else continue;
}
}
for(int i=1;i<=n;++i) puts(ren[i].name);
return 0;
} -
015 年前@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:运行时错误...|错误号: 216
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:75 有效耗时:0ms编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms同样的程序
前N次交 216?。。。
重启 AC?。。。倭寇啊。。。。
经典~~搞笑~~~吐血~~~爷微笑~~~ -
015 年前@
喝矿泉水有利健康~
-
015 年前@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms冒泡都可以秒杀,晕……
-
015 年前@
哪个大哥告诉我 ,哪里错了?
type shui=record
name:string;
liang:ansistring;
end;
var a:array[1..1000]of shui;
n,b,j,i,c:longint;
k:shui;
begin
readln(n);
for i:=1 to n do begin
readln(a[i].name);
readln(a[i].liang);
b:=length(a[i].liang);
if b>c then c:=b;
end;
for i:=1 to n do begin
for j:=1 to c-length(a[i].liang) do insert('0',a[i].liang,1);
end;
for i:=1 to n-1 do
for j:=n downto i+1 do begin
if a[j-1].liang>a[j].liang then begin
k:=a[j-1];
a[j-1]:=a[j];
a[j]:=k;
end;
end;
for i:=1 to n-1 do begin
if (a[i].name -
015 年前@
MMD...水题交了5遍才AC...
-
015 年前@
我竟然用了两遍Qsort来对付一道水题。。。
而且是用选择排序就0msAC的题。。。 -
015 年前@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
此水我竟WA一次。。。⊙﹏⊙b汗
就先把ID冒泡排一遍
然后比较发帖数先比长度,再直接用大于号比
哦了 -
015 年前@
按字典序输出.......郁闷