您好,欢迎访问一九零五行业门户网

SRM 543 Div2

决定以后多做一些tc,即使做不了比赛,也要多做一些tc上的题,顺便写一些结题报告什么的。不过像我这种在div2混的弱菜,也写不出什么高质量的结题报告,而且1000pt的题,我基本都不用看了,尽量把250和500的题写一下,1000的题目,能做出来的话就写一下。 25
    决定以后多做一些tc,即使做不了比赛,也要多做一些tc上的题,顺便写一些结题报告什么的。不过像我这种在div2混的弱菜,也写不出什么高质量的结题报告,而且1000pt的题,我基本都不用看了,尽量把250和500的题写一下,1000的题目,能做出来的话就写一下。
250:
题意:给一个字符串,由‘c’和‘v’组成,一个人只能从‘c’到‘v’,或者从‘v’到‘c’,且可以从任意一个‘c’到达另一个‘v’,但是走过的字母不能再走,也就是说一个字母只能走一次。问:最多能走多少个字母。
解法:其实是道水题了,字符串中的哪个字母少,便以哪个为起点,之后乘2加1就可以了。代码:
class ellystsp{ public: int getmax(string places) { int i,j,k; int len = places.size(); int sumv = 0,sumc = 0; for(i = 0;i sumv) { flag = 1; } else if(sumc
500:题意:题意较简单,就是给你两个数a和b,求a^(a+1)^(a+2)...^(b)的结果。
解法:由于数据范围比较大,普通方法肯定会超时。我们仔细观察可发现,如果前一个数是偶数,后一个数是奇数,且两个数相邻,则两个数异或后的结果为1。如:4和5异或结果为1,6和7异或结果为1.。。。。再仔细观察,发现,偶数个1异或后的结果为0,奇数个1异或后的结果为1,有了这两个结论,就可以做出来了,分清情况就可以了。
代码:
class ellysxors{ public: long long getxor(long long l, long long r) { int i,j,k; if(l == r) return l; else { if(l%2 && r%2) { long long s = (r - l)/2; long long k = l; long long m = 0; if(s % 2) { m = 1; } return k^m; } else if(l%2 && (!(r%2))) { long long s = (r-l)/2; long long k = l^r; long long m = 0; if(s % 2) { m = 1; } return k^m; } else if((!(l%2))&& (r%2)) { long long s = (r-l)/2+1; long long k = 1; long long m = 0; if( (s-1)%2) { m = 1; } return k^m; } else if((!(l%2)) && (!(r%2))) { long long s = (r-l)/2; long long k = r; long long m = 0; if(s%2) { m = 1; } return k^m; } } } //$testcode$};
其它类似信息

推荐信息