【MS编程之好资格赛】Problem A及Problem B
【MS编程之美资格赛】Problem A及Problem B
题目链接:点击打开链接
第一题和第二题都是小数据和大数据都AC了,65分。。略高兴
思路请看各位大神的博客吧。。他们写的比我好
A:
#include <iostream> #include <string> #include <map> #include <stdio.h> using namespace std; map<string,string> tp; int main() { int testcase; cin>>testcase; for(int a=1;a<=testcase;a++) { tp.clear(); string tar[300]; int player,wordlen; string t1,t2; cin>>player>>wordlen; for(int i=0;i<wordlen;i++) { cin>>t1>>t2; tp.insert(make_pair(t1,t2)); } int t=0; char p; while(1) { cin>>tar[t]; t++; p=getchar(); if(p=='\n') break; } map<string,string>::iterator it; for(int i=1;i<player;i++) { for(int j=0;j<t;j++) { it=tp.find(tar[j]); if(it!=tp.end()) { tar[j]=it->second; } } } cout<<"Case #"<<a<<": "; for(int i=0;i<t;i++) { if(i!=t-1) cout<<tar[i]<<" "; else cout<<tar[i]<<endl; } } return 0; }B:
#include <stdio.h> #include <iostream> #include <string.h> #include <math.h> using namespace std; int n,m,k; void swap(long long &a,long long &b) { long long t=a; a=b; b=t; } long long getc(long long j) { return j*(j-1)/2; } int main() { int testcase; int p=1; cin>>testcase; while (testcase--) { scanf("%d%d%d",&n,&m,&k); if (n<m) swap(n,m); int t=sqrt(k); int b=t>m?m:t; int a=k/b>n?n:k/b; long long max=0; for (;b>=2 && a<=n;--b,a=k/b) { long long sum=getc(a)*getc(b); int p=k-a*b; if (a<n) { sum=sum+getc(p)*a; } else { sum=sum+getc(p)*b; } max=max>sum?max:sum; } cout<<"Case #"<<p<<": "<<max<<endl; p++; } return 0; }