• P1013 [NOIP1998 提高组] 进制位


    题意很不明晰,我就随便糊上去了。

    在结果中出现的字母肯定得在加数中出现。因为不存在 (1) 进制,所以不妨假设题目的意思是一定有大于 (0) 的数出现,而正整数自己与自己相加肯定能得到更大的数,如此反复,一定会产生进位。

    而加数均是一位的,所以进位后只可能有两位数并且高位一定是 (1)

    (1+1=2)(1+2=3)(1+3=4)……如此下去所有一位数都会在加数中出现,那么这就是一张非常正经的加法表了。

    口胡完毕,接着来看怎么算。发现中的两位数个数就是数值,最后判一下合法性就完了。

    code:

    #include<bits/stdc++.h>
    using namespace std;
    #define N 10
    #define For(i,x,y)for(i=x;i<=(y);i++)
    int val[256],n;
    char x[N],y[N];
    string num[N][N];
    bool pd(int i,int j)
    {
    	if(val[x[i]]+val[y[j]]<n-1)if(num[i][j].size()==2||val[x[i]]+val[y[j]]!=val[num[i][j][0]])return 0;
    	else return 1;
    	return val[num[i][j][0]]==1&&val[x[i]]+val[y[j]]-(n-1)==val[num[i][j][1]];
    }
    int main()
    {
    	int i,j;
    	cin>>n>>x[0];
    	For(i,0,n-2)cin>>x[i];
    	For(i,0,n-2)
    	{
    		cin>>y[i];
    		For(j,0,n-2)cin>>num[i][j];
    	}
    	For(i,0,n-2)
    	For(j,0,n-2)val[x[i]]+=num[i][j].size()==2;
    	For(i,0,n-2)
    	For(j,0,n-2)
    	if(!pd(i,j))puts("ERROR!"),exit(0);
    	For(i,0,n-2)cout<<x[i]<<'='<<val[x[i]]<<' ';
    	cout<<endl<<n-1;
    	return 0;
    }
    
  • 相关阅读:
    如何将用户中的表拷贝到其他用户当中
    Java 网络编程
    oracle 10g 在win7下安装,提示程序异常终止,发生未知错误
    &运算<<移位运算
    Delegate and Protocol
    Property
    [转载]OpenCV2.2.0win32vs2010在VS2010下的安装
    Adobe_Premiere_CS4快捷键大全
    vs2008 + OpenCV2.1.0win32vs2008安装
    Xcode 3.2.5免证书开发调试[转]
  • 原文地址:https://www.cnblogs.com/May-2nd/p/14733361.html
Copyright © 2020-2023  润新知