1.HDU6247(水题)
解:对每个数*0.1向上取整相加;(还想拿一血结果少打了个++)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int maxn=1e5+10; int a[maxn]; int main(){ int flag=1; int T; cin>>T; while(T--){ int n; cin>>n; int sum=0; for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; if(a[i]%10==0)sum+=a[i]*0.1; else sum+=a[i]*0.1+1; } cout<<"Case #"<<flag++<<": "; cout<<sum<<endl; } return 0; }
2.HDU6015
解:map然后把相同课程存起来排序,把最大的两个加起来就行了;
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> #include <map> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int maxn=210; map<string,int>mp; vector<int>a[maxn]; bool cmp(int x,int y){ return x>y; } int main(){ ios::sync_with_stdio(false); int T; cin>>T; while(T--){ for(int i=0;i<maxn;i++){ a[i].clear(); } mp.clear(); int n;string s; cin>>n; int val; int tot=1; for(int i=1;i<=n;i++){ cin>>s>>val; if(mp[s]==0){ mp[s]=tot++; a[mp[s]].push_back(val); } else { a[mp[s]].push_back(val); } } for(int i=1;i<tot;i++){ sort(a[i].begin(),a[i].end(),cmp); } int ans=0; for(int i=1;i<tot;i++){ int len=a[i].size(); for(int j=0;j<min(len,2);j++){ ans+=a[i][j]; } } cout<<ans<<endl; } return 0; }
3.HDU6095
解:排序,从大到小,选取相差<k的;
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> #include <map> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int maxn=1e5+10; int a[maxn]; bool cmp(int x,int y){ return x>y; } int main(){ ios::sync_with_stdio(false); int T; cin>>T; while(T--){ int n,k; cin>>n>>k; for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+1+n,cmp); int ans=0; for(int i=1;i<=n;i++){ if(a[i]-a[i+1]>k){ ans++; break; } else { ans++; } } cout<<ans<<endl; } return 0; }
4.HDU5978
解:只有0,1的可能,我一直在想2的可能,然后想死了。。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <bits/stdc++.h> using namespace std; int main(){ int n; while(cin>>n){ if(n%2)cout<<0<<endl; else cout<<1<<endl; } return 0; }
5.CF977D
解:深搜一下。。。不知道我为啥当时没写下去,在宿舍写一发就过了;
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+10; ll a[maxn]; ll ans[maxn]; int n; bool vis[maxn]; bool dfs(int x,int now){ vis[x]=true; ans[now]=a[x]; if(now==n){ return true; } if(a[x]%3==0){ ll w=a[x]/3LL; for(int i=1;i<=n;i++){ if(!vis[i]&&a[i]==w){ if(dfs(i,now+1))return true; else vis[i]=false; } } } ll w=a[x]*2LL; for(int i=1;i<=n;i++){ if(!vis[i]&&a[i]==w){ if(dfs(i,now+1))return true; else vis[i]=false; } } vis[x]=false; return false; } int main(){ ios::sync_with_stdio(false); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+1+n); for(int i=1;i<=n;i++){ //for(int j=1;j<=n;j++)vis[j]=false; if(dfs(i,1)){ //cout<<"YES"<<endl; for(int i=1;i<=n;i++) cout<<ans[i]<<' '; cout<<endl; break; } } return 0; }
6.HDU5417
解:模拟题(照着模拟一遍就行了,数据都很小)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> using namespace std; int main(){ int x,y,w,n; while(cin>>x>>y>>w>>n){ int ans=0; while(n){ n--; if(n==0)break; if(n-x/w>0){ n-=x/w; ans+=(x+y); } else { ans+=n*w;n=0; } } cout<<ans<<endl; } return 0; }
7.HDU4514
8.POJ3587
求最大三角形外接圆半径;枚举所有点;用海伦公式还一直T;
后来看了一下别人的,用向量积和正弦
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> #include <cmath> #include <cstdio> using namespace std; const int maxn=1000+10; const double pi=acos(-1.0); pair<double,double>p[maxn]; double d[maxn][maxn]; double cross(double x1,double y1,double x2,double y2){ return x1*y2-x2*y1; } int main(){ int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lf%lf",&p[i].first,&p[i].second); } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ double dx=p[i].first-p[j].first; double dy=p[i].second-p[j].second; d[i][j]=d[j][i]=sqrt(1.0*(dx*dx+dy*dy)); } } double ans=0.0; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ for(int k=j+1;k<=n;k++){ double a=d[i][j],b=d[i][k],c=d[j][k]; double w=fabs(cross(p[k].first-p[i].first,p[k].second-p[i].second,p[j].first-p[i].first,p[j].second-p[i].second)); ans=max(ans,1.0*d[i][j]*(d[j][k]/2.0)*(d[k][i]/w)); } } } printf("%.3f\n",ans); } return 0; }
9.HDU2426
带权二分图的匹配;当时没板子也不会写,看题就想到这个东西了~……
10.POJ3335
据说是半平面交求多边形核模板题~不懂……;