2011年12月24日
摘要: SGU_108 这个题目可以直接筛出来结果,但要注意几个问题:①数组不够大,但由于推断的时候前后影响的区间并不大,因此我们可以把数组循环使用,对数组操作的时候多加一个取模运算即可。②空间不允许我们先把所有结果都处理出来,因此我们可以在筛的过程中,标记一下当前筛出的是第几个数,如果是需要输出的,再存到指定位置去即可,这样只要开出K的空间来就可以了。③由于si可能是无序的,而我们在筛的过程中只能顺序找到,而我们又不能每次都花O(K)的时间去看看当前是不是要输出的,所以需要预先按si的值排下序,为了能够方便查找、更改,我们不能直接对si排序,但可以对si的标号按si的大小进行排序,同时还要注意si有 阅读全文
posted @ 2011-12-24 21:44 Staginner 阅读(562) 评论(0) 推荐(0) 编辑
摘要: SGU_106 这个题目AC了的程序也写的不尽相同,但就NOWCOW上面的那个C++程序来说,处理某些数据确实存在问题,所以最好还是写自己的思路了。 我的思路就是首先把一个基本解求出来,然后看在x1、x2的范围内x的范围是多少,然后找到对应的y的范围,再看y的范围有多少个解是在y1、y2范围之内的,这个就是最后的答案。 当然,对于含有a=0或b=0的情况要特判一下。#include<stdio.h>#include<string.h>long long int a, b, c, x1, x2, y1, y2;long long int abs(int x){ retur 阅读全文
posted @ 2011-12-24 17:19 Staginner 阅读(866) 评论(2) 推荐(0) 编辑
摘要: SGU_107 一开始没有什么想法,后来突然想到乘方的后9位是由这个数本身的后9位决定的,于是就先打印了一下9位数以内模10^9为987654321的值,发现只有8个9位数,也就是说当x的后9位为这8个数其一时,x就是符合要求的。#include<stdio.h>#include<string.h>int N;int main(){ int i; while(scanf("%d", &N) == 1) { if(N <= 8) printf("0\n"); else if(N == 9) printf(". 阅读全文
posted @ 2011-12-24 00:44 Staginner 阅读(272) 评论(0) 推荐(0) 编辑