A1039
#include<bits/stdc++.h>
using namespace std;
const int M=26*26*26*10+1;
vector<int> selectcourse[M];//每个学生选择的课程编号,这样代表二维数组
//selectcourse[M][j]
//将字符串name转换为数字,避免数据庞大
int getID(char name[]){
int id=0;
for(int i=0;i<3;i++){
id=id*26+(name[i]-'A');
}
id=id*10+(name[3]-'0');
return id;
}
int main()
{
char name[5];
int n,k;//n名学生,k门课程
scanf("%d%d",&n,&k);
for(int i=0;i<k;i++)
{
int course,x;
scanf("%d%d",&course,&x);//course是课程编号,x是选课人数
for(int j=0;j<x;j++)
{
scanf("%s",name);
int id=getID(name);//将名字转换为数字
selectcourse[id].push_back(course);//将课程编号加入学生选择中
}
}
for(int i=0;i<n;i++)
{
scanf("%s",name);
int id=getID(name);
sort(selectcourse[id].begin(),selectcourse[id].end());
printf("%s %d",name,selectcourse[id].size());
for(int j=0;j<selectcourse[id].size();j++)
{
printf(" %d",selectcourse[id][j]);
}
printf("\n");
}
return 0;
}
A1047
#include<bits/stdc++.h>
using namespace std;
const int maxn=40001;
const int maxc=2501;
char name[maxn][5];//maxn个学生
vector<int> course[maxc];
bool cmp(int a,int b){
return strcmp(name[a],name[b])<0;//按姓名字典序排序
}
int main()
{
int n,k;//n是学生数量,k是课程数量
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
int size,id;
scanf("%s%d",name[i],&size);
for(int j=0;j<size;j++)
{
scanf("%d",&id);
course[id].push_back(i);
}
}
for(int i=1;i<=k;i++)
{
printf("%d %d\n",i,course[i].size());
sort(course[i].begin(),course[i].end(),cmp);
for(int j=0;j<course[i].size();j++)
{
printf("%s\n",name[course[i][j]]);
}
}
return 0;
}
A1063
#include<bits/stdc++.h>
using namespace std;
const int N=60;
set<int> a[N];
void compare(int x,int y)
{
int totalnum=a[y].size(),samenum=0;
for(set<int>::iterator it=a[x].begin();it!=a[x].end();it++){
if(a[y].find(*it)!=a[y].end()) samenum++;
else totalnum++;
}
printf("%.1f%\n",samenum*100.0/totalnum);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x,score;
scanf("%d",&x);//x没用
for(int j=1;j<=x;j++)
{
scanf("%d",&score);
a[i].insert(score);
}
}
int k;
scanf("%d",&k);
for(int i=0;i<k;i++)
{
int b,c;
scanf("%d%d",&b,&c);
//先找a[b]和a[c]相等的元素
compare(b,c);
}
return 0;
}
A1060
我尽力了,我只得了17分
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int n, p = 0, q = 0;
char a[10000], b[10000], A[10000], B[10000];
scanf("%d%s%s", &n, a, b);
int cnta = strlen(a), cntb = strlen(b);
for(int i = 0; i < strlen(a); i++) {
if(a[i] == '.') {
cnta = i;
break;
}
}
for(int i = 0; i < strlen(b); i++) {
if(b[i] == '.') {
cntb = i;
break;
}
}
int indexa = 0, indexb = 0;
while(a[p] == '0' || a[p] == '.') p++;
while(b[q] == '0' || b[q] == '.') q++;
if(cnta >= p)
cnta = cnta - p;
else
cnta = cnta - p + 1;
if(cntb >= q)
cntb = cntb - q;
else
cntb = cntb - q + 1;
if(p == strlen(a))
cnta = 0;
if(q == strlen(b))
cntb = 0;
while(indexa < n) {
if(a[p] != '.' && p < strlen(a))
A[indexa++] = a[p];
else if(p >= strlen(a))
A[indexa++] = '0';
p++;
}
while(indexb < n) {
if(b[q] != '.' && q < strlen(b))
B[indexb++] = b[q];
else if(q >= strlen(b))
B[indexb++] = '0';
q++;
}
if(strcmp(A, B) == 0 && cnta == cntb)
printf("YES 0.%s*10^%d", A, cnta);
else
printf("NO 0.%s*10^%d 0.%s*10^%d" , A, cnta, B, cntb);
return 0;
}