dreamangel

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  14 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks

#

1.打开你要做的图
2.新建一个图层,画一个矩形
3.图层--删格化图层--魔术棒选中矩形--清除--反选--编辑--充填你要的边框颜色
4.模糊--高斯模糊5.0--象素化--马赛克20
5.双击边框的图层 混合选项--设置斜面和浮雕以及等高线(数值如下图)

6.完成
posted @ 2009-11-29 16:03 飞翔天使 阅读(266) | 评论 (0)编辑 收藏

Problem A 某年某月某日
注意:命令与参数之间可能有多个空格!有些参数要不区分大小写!
计算星期的公式 W=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7
其中y-年,m-月,d-日,特别地,当m为1或2时,代入该公式的m必须加12,然后y必须减1,最后得出来W的值为0到6按顺序分别代表星期一到星期日.

Problem B 你能连续打多少个字符
用数组a[1……128](初始化为-1)存储每个字符的最后出现位置,当字符数量等于m时,求出此时的最大值;同时将重新统计的位置设置为a[1……128]中的最小值加1,并将a[l]改为-1。

Problem C 连分数
模拟题。类似求循环小数的问题,关键在打印格式的处理。

Problem D 正多边形的面积
设正n边形的面积为S,则S=(1/2)nR^2*sinα=nr^2tan(α/2),n--边数,R--三角形的外接圆的半径,r--三角形的内切圆的半径,α--一边所对的圆心角(以度计)。正n边形各内角为180(n-2)/n,n≥3且为自然数。模板参见1921

Problem E Stars
从1开始建立递归关系。

Problem F 井字游戏
模拟题。假设A先走,B后走,则有效的局面应符合以下2种情形之一:
1.A与B的步数一致且A未获胜;
2.A的步数比B多1且B未获胜。

Problem G Phoenix的果园之储备过冬
将输入的水果和保暖袋的体积分别排序,然后按从小到大的顺序来匹配,统计最大数。

Problem H Multi Number
简单题。

posted @ 2009-11-11 20:38 飞翔天使 阅读(257) | 评论 (0)编辑 收藏

http://acm.fjnu.edu.cn/show?problem_id=1872
如果直接用递归函数肯定会tle,有两种解决方案:
1)先用暴力法列出数值表,找规律,或用数学方法推导,直接找到递推式。
2)在程序开始先算出所有题目要求的数值范围,并保存,在主程序里直接调用就行了。
#include <stdio.h>

int main()
{
    
int a,b,c,w[21][21][21];
    
for(a=0;a<21;a++){
                      
for(b=0;b<21;b++)
                                       w[
0][a][b]=w[a][0][b]=w[a][b][0]=1;
    }

    
for(a=1;a<21;a++){
                      
for(b=1;b<21;b++)
                                       
for(c=1;c<21;c++){
                                                         
if(a<&& b<c)
                                                                w[a][b][c]
=w[a][b][c-1+ w[a][b-1][c-1- w[a][b-1][c];
                                                         
else
                                                                w[a][b][c]
=w[a-1][b][c] + w[a-1][b-1][c] + w[a-1][b][c-1- w[a-1][b-1][c-1];
                                       }

    }

     
while(scanf("%d %d %d",&a,&b,&c),a!=-1||b!=-1||c!=-1){
     
if(a <= 0 || b <= 0 || c <= 0)
            printf(
"w(%d, %d, %d) = %d\n",a,b,c,1);
        
else if(a > 20 || b > 20 || c > 20)
            printf(
"w(%d, %d, %d) = %d\n",a,b,c,w[20][20][20]);
        
else
            printf(
"w(%d, %d, %d) = %d\n",a,b,c,w[a][b][c]);

    }

    
return 0;
}
posted @ 2009-11-02 15:59 飞翔天使 阅读(201) | 评论 (0)编辑 收藏

64位整形引起的混乱主要在两方面,一是数据类型的声明,二是输入输出。

首先是如果我们在自己机器上写程序的话,情况分类如下:

(1) 在win下的VC6.0里面,声明数据类型的时候应该写作

__int64 a;

输入输出的时候用 %I64d

scanf("%I64d",&a);
printf("%I64d",a);

(2) 在linux下的gcc/g++里面,数据类型声明写作

long long a;

输入输出时候用 %lld

(3) 在win下的其它IDE里面[包括高版本Visual Studio],数据类型声明用上面两种均可

输入输出用 %I64d


以下是对这种混乱情况的解释,如无兴趣可以跳过

首先要说的是,和Java等语言不同,C/C++本身并没有规定各数据类型的位数,只是限定了一个大小关系,也就是规定从所占的bit数来说,short <= int <= long <= long long。至于具体哪种类型占用多少位,是由你所用的开发平台的编译器决定的。在现在的PC上一个通常的标准是,int和long同为32位,long long为64位。但是如果换到其它平台(如ARM)上,这个数字可能会有不同,类型所占的大小可以用sizeof()运算符查看。

long long是C99标准中新引进的数据类型,在古老的VC6.0中并没有这个类型,所以在VC6.0中用"long long"会发生编译错误。为了表示64位整数,VC6里采用的是微软自己搞出来的一个数据类型,叫做__int64,所以如果你是在VC6.0下编译的话,应该用__int64定义64位整型。新版的Visual Studio已经支持long long了。GCC是支持long long的,我们在win系统中使用的其它IDE如Dev-Cpp, Code::Blocks等等大多是采用的MinGW编译环境,它是与GCC兼容的,所以也支持long long(另外为了与MS兼容,也支持__int64)。如果是在纯的linux下,就只能使用long long了。

关于使用printf的输入输出,这里就有一个更囧的情况。实际上只要记住,主要的区分在于操作系统:如果在win系统下,那么无论什么编译器,一律用%I64d;如果在linux系统,一律用%lld。这是因为MS提供的msvcrt.dll库里使用的就是%I64d的方式,尽管Dev-Cpp等在语法上支持标准,但也不得不使用MS提供的dll库来完成IO,所以就造成了这种情况。

那么对ACMer来说,最为关心的就是在各个OJ上交题应分别使用哪种方式了。其实方式只有有限的几种:

如果服务器是linux系统,那么定义用long long,IO用%lld
如果服务器是win系统,那么声明要针对编译器而定:
+ 如果用MS系列编译器,声明用__int64 [现在新版的Visual Studio也支持long long了]
+ 如果用MinGW环境,声明用long long
+ 无论什么编译器,IO一律%I64d

下面把各大OJ情况列表如下:

1. TOJ : Linux系统
2. ZOJ : Linux系统
3. POJ : Win系统,语言如选择C/C++,则用MS编译器[支持两种声明],如选择GCC/G++,则为MinGW
4. UVa : Linux系统
5. Ural: Win系统,MS编译器[支持两种声明]
6. SPOJ: Linux系统
7. SGU : Win系统,MS编译器[支持两种声明]

如果有不太清楚的情况可以先看看各OJ上的FAQ,通常会有说明。

另外,为了避免混乱,当数据量不大时,用cin, cout进行输入输出也是一种选择。

posted @ 2009-10-19 09:52 飞翔天使 阅读(1301) | 评论 (0)编辑 收藏

仅列出标题
共2页: 1 2