摘要:
题目要求 x^2 + y^2+ z^2 = N,把 1^2 到 100^2 的平方数保留一份,并且标记一份,后面就使用两重循环就可以了。 代码如下:#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;char hash[100005][2];int rec[105];int main(){ for( int i= 1; i<= 100; ++i ) { rec[i]= i* i; hash[rec[i]][0]= 1; hash[rec[i]][1]= i; 阅读全文
摘要:
题目:给定一个数字串0 - N-1,每次可以移动首位数字到末尾,求最少的逆序对的组合方式。先求出原序列的逆序对,再用数学公式算出最佳值。 假设有 10 个数,依题义为 0 - 9,那么首位为4的话,从首位移动到末尾产生新的逆序对为0 - 9中大于4的数字减去少于4的数。 代码如下:#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;int N, num[5005];void getint( int &t ){ char c; while( c= getcha 阅读全文
摘要:
以下代码G++超时,C++勉强过,果然是链式的伤不起啊!!!#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;int N, M, rec[200010];struct Node{ int l, r, best; Node *lch, *rch; Node( int ll, int rr ) { l= ll, r= rr, best= 0, lch= rch= NULL; } int mid( ) { return ( l+ r )>> 1; }};in 阅读全文
摘要:
这题就直接用Java水过了,利用BigDecimal 类型,但是还是有一种情况会判断出错,就是输入 0.0 和 0 ,程序会认为不相等,可能是由于在去除后导零的时候是在寻找前面的非零数字吧。解决的办法是先给 a , b 两个数都加上 1,判断是否相等。但是这样 -1.0 和 -1 又会判断错误了,没事,再分别加上一个1就可以了。 代码如下:import java.math.BigDecimal;import java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(Str. 阅读全文
摘要:
该题也算是最基础的线段树了,由于没有很好的理解Lazy思想,导致前面为了写出一个正确的程序花了半天功夫啊。前面是这样想的,对于某一段区间,如果已经赋了值,那么后面的修改就在这个值上进行,例如前面如果1 - 3 赋为2,后面如果又有一次 2 - 3赋为1的话,那么就在 2- 3的区间上赋值为 -1,因为前面已经在1-3算作 2 了。虽说思路出来了,但后面一直还是WA,原因在于经过多次的更新后,有些应该被舍弃的值被重复利用了,比如上例中再出现一组1 - 3 赋值为3,后面的 2- 3区间值就不对了,于是又加了时间戳,最后写出来AC的代码也便是搓不可言了。#include <cstdio> 阅读全文