分析:24进制转换
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int a,b; 6 while(cin>>a>>b){ 7 cout<<(a+b)%24<<endl; 8 } 9 return 0; 10 }
分析:求曼哈顿距离最近的点
1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" 4 #include "string" 5 #include "cmath" 6 using namespace std; 7 const int maxn=50+10; 8 const long long INF=500000001; 9 int n,m; 10 int vis[maxn]; 11 typedef struct 12 { 13 long long x,y; 14 }point; 15 typedef struct{ 16 long long x,y; 17 int num; 18 }fun; 19 point p[maxn]; 20 fun s[maxn]; 21 int main() 22 { 23 while(cin>>n>>m) 24 { 25 memset(vis,0,sizeof(vis)); 26 for(int i=1;i<=n;i++) 27 scanf("%lld%lld",&p[i].x,&p[i].y); 28 for(int i=1;i<=m;i++){ 29 scanf("%lld%lld",&s[i].x,&s[i].y); 30 s[i].num=i; 31 } 32 for(int i=1;i<=n;i++){ 33 long long minx=INF; 34 int k=0; 35 for(int j=1;j<=m;j++){ 36 long long t=abs(p[i].x-s[j].x)+abs(p[i].y-s[j].y); 37 if(t<minx){ 38 minx=t; 39 k=j; 40 } 41 } 42 printf("%d ",k); 43 } 44 } 45 return 0; 46 }
分析:求所有两个相乘为N的数的最大位数的最小值
1 #include "iostream" 2 #include "cstdio" 3 #include "cmath" 4 using namespace std; 5 const int INF=50; 6 long long n; 7 int solve(long long num){ 8 int cnt=0; 9 while(num){ 10 cnt++; 11 num/=10; 12 } 13 return cnt; 14 } 15 int main() 16 { 17 while(cin>>n){ 18 long long minx=INF; 19 //cout<<solve(10000)<<endl; 20 for(long long i=1;i*i<=n;i++){ 21 if(n%i==0){ 22 long long t=max(solve(i),solve(n/i)); 23 minx=min(minx,t); 24 } 25 } 26 cout<<minx<<endl; 27 } 28 }
分析:首先我们按照从大到小进行排序,然后选取前a个,这样得出来的平均值一定是最大的。然后接着我们统计总共有多少个跟a相同的数,并统计在第a个数之前有多少个跟a相同的数,如果第1个数个数跟第a个相同,则为c[x][y],否则我们统计从a到b的组合数相加.注意求组合数的方法,很经典。
1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" 4 #include "string" 5 #include "cmath" 6 #include "algorithm" 7 #include "map" 8 #include "set" 9 #include "vector" 10 #define eps 1e-6 11 using namespace std; 12 const int maxn=55; 13 double s[maxn]; 14 long long c[maxn][maxn]; 15 int n,a,b; 16 bool cmp(double x,double y){ 17 return x>y; 18 } 19 void init(){ 20 c[0][0]=1; 21 for(int i=1;i<=n;i++){ 22 c[i][0]=1,c[i][i]=1; 23 for(int j=1;j<i;j++) 24 c[i][j]=c[i-1][j-1]+c[i-1][j]; 25 } 26 } 27 int main() 28 { 29 while(cin>>n>>a>>b){ 30 init(); 31 for(int i=0;i<n;i++) 32 cin>>s[i]; 33 sort(s,s+n,cmp); 34 double sum=0; 35 for(int i=0;i<a;i++){ 36 sum+=s[i]; 37 } 38 double h=sum/(double)a; 39 int x=0,y=0; 40 for(int i=0;i<n;i++) 41 if(s[i]==s[a-1]){ 42 x++; 43 if(i<a) 44 y++; 45 } 46 //cout<<x<<" "<<y<<endl; 47 printf("%.6f ",h); 48 if(s[0]!=s[a-1]){ 49 cout<<c[x][y]<<endl; 50 }else{ 51 long long cnt=0; 52 for(int i=a;i<=min(b,x);i++) 53 cnt+=c[x][i]; 54 cout<<cnt<<endl; 55 } 56 //printf("%d ",ans); 57 } 58 return 0; 59 }