zoukankan      html  css  js  c++  java
  • 7.26第三次多校

    目前有01,03,10,11,烂尾了
    官方题解

    1001
    不用高精度,,,超过44E就TAT了
    longlong就够了
    注意0的情况

    #include<cstdio>
    #include<cmath>
    #include<iostream>
    #include<string>
    using namespace std;
    int main(){
    	string st;
    	while (cin>>st){
    		if (st.length()>10) puts("TAT");
    		else {
                long long n=0;
                for (int i=0;i<st.length();i++){
                    n = n*10 + (st[i]-'0');
                }
                //printf("n=%I64d
    ",n);
                if (!n)puts("TAT");
                else {
                    int ans=0;
                    for (;n>1;ans++){
                        n= (long long)floor((sqrt(n)));
                    }
                    if (ans<6)printf("%d
    ",ans);
                    else puts("TAT");
                }
    		}
    	}
    	return 0;
    }
    

    1002_hdu5273
    这里写图片描述
    官方题解讲的略简单

    某题解
    这题意思就是让你先列出一个hi的排列,然后如果满足(hi>hi-1 and hi>hi+1)的值为1,那么c[i]这个值就能取,然后我们把第一个样例的全部情况列出来,模拟一下答案,发现公式就是(c[1]+c[n])/3+(c[2]+…+c[n-1])/2;

    某题解+1
    然后对这个全排列进行分析,对i这个位置,
    如果在中间的话,相邻就有两个元素,就是三个元素的全排列,有3!=6种情况,然而只有大的在中间,两个小的在左右这种情况有效,排列两种,所以所有情况中是1/3是符合的,所以对期望的贡献值是Ci/3;
    如果在两端的话,相邻就是一个元素了,2!=2,只有一种情况符合,所以贡献Ci/2,
    之后对1进行一下特判,答案就出来了。

    #include<cstdio>
    using namespace std;
    double c[1010];
    int main(){
    	int n;
    	while (scanf("%d",&n)==1){
    		for (int i=1;i<=n;i++)scanf("%lf",&c[i]);
    		if (n==1)printf("%.6lf
    ",c[1]);
    		else {
    			double ans=(c[1]+c[n])/2.0;
    			for (int i=2;i<=n-1;i++)ans+=c[i]/3.0;
    			printf("%.6lf
    ",ans);
    		}
    	}
    	return 0;
    } 
    

    1003
    重点在骑士和皇后的情况
    骑士可以找规律或者dp搞出来
    皇后我这么搞然后挂了,cdm说一看表就是个威佐夫博弈
    http://blog.csdn.net/y990041769/article/details/21694007
    看了下,打表发现问题
    表张这样
    这里写图片描述
    跑debug里的代码
    这里写图片描述

    然后出来这个
    这里写图片描述
    不知道为什么,,,
    感觉像威佐夫博弈,然而图有点出入,
    最不明所以的是这么写还A了,我的天

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    using namespace std;
    const int N=1007;
    int  h[N][N];
    bool q[N][N];
    
    void Init(){
    	memset(h,0,sizeof(h));
    	for (int i=1;i<N-5;i+=3){
    		h[i][i]=-1;
    		h[i+2][i+1]=h[i+1][i+2]=1;
    	}
    	
    	memset(q,1,sizeof(q));
    	for (int i=1,j=1;max(i,j)<N-5;i+=2,j++)q[i][j]=0;
    	for (int i=1,j=1;max(i,j)<N-5;i++,j+=2)q[i][j]=0;
    } 
    
    double phi = (1 + sqrt(5)) / 2.0;
    void debug(){
    	for (int i=1;i<=30;i++){
    		for (int j=1;j<=30;j++){
    			bool ok=((min(i-1, j-1) != (int)(phi*abs(i-j))));
    			if (ok!=q[i][j])printf("[%d][%d]->%d
    ",i,j,ok);
    		}
    	}
    }
    
    int main(){
    	//freopen("fuck.in","r",stdin);
    	int T,type,n,m;
    	scanf("%d",&T);
    	Init();
    	//debug();
    	while (T--){
    		scanf("%d%d%d",&type,&n,&m);
    		if (type==1) puts((n&m&1)?"G":"B");
    		if (type==2) puts((n==m )?"G":"B");
    		if (type==3){
    			if (h[n][m]== 0)puts("D");
    			if (h[n][m]== 1)puts("B");
    			if (h[n][m]==-1)puts("G");
    		}
    		if (type==4){
    			puts((min(n-1,m-1)!=(int)(phi*abs(n-m)))?"B":"G");
    		}//puts((q[n][m])?"B":"G");
    	}
    	return 0;
    } 
    

    1010
    这里写图片描述
    这里写图片描述

    #include<cstdio>
    #include<iostream>
    using namespace std;
    
    int main(){
    	int a,v1,v2;
    	while (scanf("%d%d%d",&a,&v1,&v2)==3){
    		if(!a)puts("0.0000000000");
    		else if (v1<=v2)puts("Infinity");
    		else {
    			double ans=a*v1*1.0/(v1*v1-v2*v2);
    			printf("%.10lf
    ",ans);
    		}
    	}
    	return 0;
    } 
    

    1011
    10W数据,,平方过?
    当时的想法是先写个暴力T一发再说,,
    然后莫名其妙就A了
    cw分析的不错:因为距离差最多只有200000种可能。所以最多只运行200001次。。。。所以没有平方那么多,。

    #include<cstdio>
    #include<cmath> 
    #include<cstring>
    using namespace std;
    const int N=100007;
    bool vis[N<<1];
    int ax[N],ay[N];
    int n,m;
    
    bool work(){
    	memset(vis,0,sizeof(vis));
    	for (int i=1;i<=n;i++)
    		scanf("%d%d",&ax[i],&ay[i]);
    	for (int i=1;i<=n;i++)if(ax[i]<=m&&ay[i]<=m){
    		for (int j=1;j<i;j++)if(ax[j]<=m||ay[j]<=m){
    			int d=abs(ax[i]-ax[j])+abs(ay[i]-ay[j]);
    			if (vis[d])return 1;
    			else vis[d]=1;
    		}
    	}
    	return 0;
    }
    
    int main(){
    	//freopen("fuck.in","r",stdin);
    	int T;scanf("%d",&T);
    	while (T--){
    		scanf("%d%d",&n,&m);
    		if (work())puts("YES");
    		else puts("NO");
    	}
    	return 0;
    } 
    
  • 相关阅读:
    实例:如何设计一款好的Metro UI应用
    给用户和开发者最佳的.Net框架部署方案
    软件测试对嵌入式系统的影响
    如何创造出优秀的用户体验?
    Xamarin:使用C#移植Android操作系统
    WCF数据服务5.0 RTM发布
    演进式数据库建模
    zsh 命令行编辑技巧三则
    Oracle与MySQL的几点区别
    window下mysql表的修复
  • 原文地址:https://www.cnblogs.com/cww97/p/12349398.html
Copyright © 2011-2022 走看看