using namespace std; struct Web{ char url[101]; int num; }; int main() { int n; cin >> n; Web web[n]; int max_rslt; int i = 0; cin >> web[i].url >> web[i].num; max_rslt = web[i].num; for(i = 1; i < n; i++){ cin >> web[i].url >> web[i].num; if(web[i].num > max_rslt){ max_rslt = web[i].num; } } for(i = 0; i < n; i++){ if(web[i].num == max_rslt){ cout << web[i].url << endl; } } return 0; }
为啥用c语言写的程序用到了结构体排序就compile error,用c++交就能过,好神奇
struct Memory{ char brr[101]; int x; }; int cmp(const void a,const void b){ return ((Memory )b).x > ((Memory )a).x ? 1 : -1; } int main(){ int T,i,y,j; scanf(“%d\n”,&T); char arr[T][105]; for(i=0;i<T;i++){ gets(arr[i]); } struct Memory crr[T]; for(i=0;i<T;i++){ y=strlen(arr[i]); for(j=0;j<101;j++){ crr[i].brr[j]=’ ‘; } for(j=0;arr[i][j]!=’ ‘;j++){ crr[i].brr[j]=arr[i][j]; } int a,b=y-j-2; crr[i].x=0; for(a=j+1;arr[i][a]!=’\0’;a++){ crr[i].x+=(arr[i][a]-‘0’)*(int)pow(10,b); b–; } }
qsort(crr,T,sizeof(crr[0]),cmp); for(i=0;i<T;i++){ if(crr[i].x!=crr[i+1].x) break; } for(j=0;j<=i;j++){ printf("%s\n",crr[j].brr); } return 0;
}
在线处理 不需要用数组保存所有网站 一边读一边记录,只保留最大值
#include <bits/stdc++.h> using namespace std; int main(){ int max = - 0x3F3F3F3F; int n; int cnt = 0; string ss[20]; scanf("%d", &n); while (n--!=0){ string s; cin >> s; int w; cin >> w; if (w>max){ cnt = 0; max = w; ss[cnt] = s; cnt++; } else if (w==max){ ss[cnt] = s; cnt++; } } for (int i=0;i<cnt;++i){ cout << ss[i] << endl; } }
#include<iostream> #include<string> using namespace std; int main(){ string url[25]; int v[25]; int n,max=0; std::cin >> n; for(int i=0;i<n;i++){ std::cin>> url[i] >> v[i]; if(v[i]>max) max=v[i]; } for(int i=0;i<n/2;i++){ if(v[i]==max){ std::cout << url[i] << std::endl; } } for(int i=n/2;i<n;i++){ if(v[i]==max){ std::cout << url[i] << std::endl; } } }
用map去记录相关系数和其对应的url,同时记录相关系数的最大值,这样就可以直接读到最大相关系数所对应的url了。
map
附上代码
#include <iostream> #include <string> #include <map> #include <vector> using namespace std; void solve() { int n; cin >> n; cin.ignore(); map< int, vector<string> > data; int maxValue = 0; for (int i = 0; i < n; i++) { int value; string url; cin >> url >> value; if (maxValue < value) { maxValue = value; } if (data.find(value) == data.end()) { vector<string> temp; temp.push_back(url); data[value] = temp; } else { data[value].push_back(url); } } for (vector<string>::iterator it = data[maxValue].begin(); it != data[maxValue].end(); it++) { cout << *it <<endl; } } int main(int argc, char* argv[]) { solve(); return 0; }
编译运行都行,就是提交后就是wrong answer,求大神帮忙
typedef struct Web{ char URL[100]; int vi;//1~100 }web; int main() { int n, i, j = 1,k = 0; web arr[20], *p[20];//0~20 p[0] = arr;
scanf("%d",&n); for(i=0; i<n; i++) scanf("%s%d",arr[i].URL,&arr[i].vi); for(i=0; i<n; i++) if(arr[i].vi > p[0]->vi) { p[0] = &arr[i]; k = j; j = 1;} else if(arr[i].vi == p[0]->vi) { p[j] = &arr[i]; j++; } for(i=0; i<=k; i++) printf("%s\n",p[i]->URL); return 0;
#include <bits/stdc++.h> using namespace std; typedef struct zz{string s;int t;int k;}zz; vector <zz> arr(3614); bool cmp(const zz &a,const zz &b) { if(a.t==b.t) return a.k<b.k; else return a.t>b.t; } int main() { int t; cin>>t; for(int i=0;i<t;i++) { cin>>arr[i].s>>arr[i].t; arr[i].k=i; } sort(arr.begin(),arr.end(),cmp); int i; for(i=0;arr[i].t==arr[i+1].t;i++) { cout<<arr[i].s<<endl; } cout<<arr[i].s<<endl; return 0; }
如果用点别的stl肯定更简单
题目测试数据也太水了。。只配我这种水代码(哭唧唧)
using namespace std;
typedef struct { char url[101]; int vi; }Web;
int main() { Web web[20]; int N; cin>>N; int n, max = 1; for(n = 0; n < N; n++) { scanf(“%s%d”, web[n].url, &web[n].vi); if(web[n].vi > max) max = web[n].vi; } for(n = 0; n < N; n++) if(web[n].vi == max) cout<<web[n].url<<endl; return 0; }
这道题解法就是排序 但我这里用了优先队列
using namespace std; struct webSite { int input; string URL; int V; bool operator<(const webSite& bb) const { if(V!=bb.V) return Vbb.input; } }; int n; priority_queue Q; int main() { cin>>n; for(int i=1;i<=n;i++) { string url; int vv; cin>>url>>vv; Q.push((webSite){i,url,vv}); }
webSite Max=Q.top(); while(Q.top().V==Max.V) { webSite tmp=Q.top();Q.pop(); cout<<tmp.URL<<endl; }
优先队列,大的在前面,所以重载运算符的时候,return那里符号反一下 但是operator<那里不要改, 而vector sort,如果要重载运算符,默认是小的在前面,return那里符号不用反
怎么过不了??
struct Node{ string s; int m; }a[21];
bool cmp(Node a,Node b) { return a.m>b.m; } int main() { int n; cin >> n; for(int i=0;i> a[i].s >> a[i].m; } sort(a,a+n,cmp); for(int i=0;ia[i+1].m) { cout << a[i].s << endl; break; } else cout << a[i].s << endl; } return 0; }
include
include
using namespace std;
struct Web{
char url[101];
int num;
};
int main()
{
int n;
cin >> n;
Web web[n];
int max_rslt;
int i = 0;
cin >> web[i].url >> web[i].num;
max_rslt = web[i].num;
for(i = 1; i < n; i++){
cin >> web[i].url >> web[i].num;
if(web[i].num > max_rslt){
max_rslt = web[i].num;
}
}
for(i = 0; i < n; i++){
if(web[i].num == max_rslt){
cout << web[i].url << endl;
}
}
return 0;
}
为啥用c语言写的程序用到了结构体排序就compile error,用c++交就能过,好神奇
include
include
include
include
struct Memory{
char brr[101];
int x;
};
int cmp(const void a,const void b){
return ((Memory )b).x > ((Memory )a).x ? 1 : -1;
}
int main(){
int T,i,y,j;
scanf(“%d\n”,&T);
char arr[T][105];
for(i=0;i<T;i++){
gets(arr[i]);
}
struct Memory crr[T];
for(i=0;i<T;i++){
y=strlen(arr[i]);
for(j=0;j<101;j++){
crr[i].brr[j]=’ ‘;
}
for(j=0;arr[i][j]!=’ ‘;j++){
crr[i].brr[j]=arr[i][j];
}
int a,b=y-j-2;
crr[i].x=0;
for(a=j+1;arr[i][a]!=’\0’;a++){
crr[i].x+=(arr[i][a]-‘0’)*(int)pow(10,b);
b–;
}
}
}
在线处理
不需要用数组保存所有网站
一边读一边记录,只保留最大值
用
map
去记录相关系数和其对应的url,同时记录相关系数的最大值,这样就可以直接读到最大相关系数所对应的url了。附上代码
编译运行都行,就是提交后就是wrong answer,求大神帮忙
include
typedef struct Web{
char URL[100];
int vi;//1~100
}web;
int main()
{
int n, i, j = 1,k = 0;
web arr[20], *p[20];//0~20
p[0] = arr;
}
如果用点别的stl肯定更简单
题目测试数据也太水了。。只配我这种水代码(哭唧唧)
include
using namespace std;
typedef struct
{
char url[101];
int vi;
}Web;
int main()
{
Web web[20];
int N;
cin>>N;
int n, max = 1;
for(n = 0; n < N; n++)
{
scanf(“%s%d”, web[n].url, &web[n].vi);
if(web[n].vi > max) max = web[n].vi;
}
for(n = 0; n < N; n++)
if(web[n].vi == max) cout<<web[n].url<<endl;
return 0;
}
这道题解法就是排序
但我这里用了优先队列
include
using namespace std;
struct webSite
{
int input;
string URL;
int V;
bool operator<(const webSite& bb) const
{
if(V!=bb.V) return Vbb.input;
}
};
int n;
priority_queue Q;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
string url;
int vv;
cin>>url>>vv;
Q.push((webSite){i,url,vv});
}
}
优先队列,大的在前面,所以重载运算符的时候,return那里符号反一下
但是operator<那里不要改,
而vector sort,如果要重载运算符,默认是小的在前面,return那里符号不用反
怎么过不了??
include
include
using namespace std;
struct Node{
string s;
int m;
}a[21];
bool cmp(Node a,Node b)
{
return a.m>b.m;
}
int main()
{
int n;
cin >> n;
for(int i=0;i> a[i].s >> a[i].m;
}
sort(a,a+n,cmp);
for(int i=0;ia[i+1].m)
{
cout << a[i].s << endl;
break;
}
else
cout << a[i].s << endl;
}
return 0;
}