高性能计算机 (2001年国家集训队冬令营试题)

问题描述

现在有一项时间紧迫的工程计算任务要交给你–国家高性能并行计算机的主管工程师–来完成。为了尽可能充分发挥并行计算机的优势,我们的计算任务应当划分成若干个小的子任务。

这项大型计算任务包括A和B两个互不相关的较小的计算任务。为了充分发挥并行计算机的运算能力,这些任务需要进行分解。研究发现,A和B都可以各自划分成很多较小的子任务,所有的A类子任务的工作量都是一样的,所有的B类子任务也是如此(A和B类的子任务的工作量不一定相同)。A和B两个计算任务之间,以及各子任务之间都没有执行顺序上的要求。

这台超级计算机拥有p个计算节点,每个节点都包括一个串行处理器、本地主存和高速cache。然而由于常年使用和不连贯的升级,各个计算节点的计算能力并不对称。一个节点的计算能力包括如下几个方面:

  1. 就本任务来说,每个节点都有三种工作状态:待机、A类和B类。其中,A类状态下执行A类任务;B类状态下执行B类任务;待机状态下不执行计算。所有的处理器在开始工作之前都处于待机状态,而从其它的状态转入A或B的工作状态(包括A和B之间相互转换),都要花费一定的启动时间。对于不同的处理节点,这个时间不一定相同。用两个正整数分别表示节点i转入工作状态A和工作状态B的启动时间(单位:ns)。
  2. 一个节点在连续处理同一类任务的时候,执行时间–不含状态转换的时间–随任务量(这一类子任务的数目)的平方增长,即:
      若节点i连续处理x个A类子任务,则对应的执行时间为:
      类似的,若节点i连续处理x个B类子任务,对应的执行时间为:
      其中, 是系数,单位是ns。

任务分配必须在所有计算开始之前完成,所谓任务分配,即给每个计算节点设置一个任务队列,队列由一串A类和B类子任务组成。两类子任务可以交错排列。

计算开始后,各计算节点分别从各自的子任务队列中顺序读取计算任务并执行,队列中连续的同类子任务将由该计算节点一次性读出,队列中一串连续的同类子任务不能被分成两部分执行。

编程任务

现在需要你编写程序,给这p个节点安排计算任务,使得这个工程计算任务能够尽早完成。假定任务安排好后不再变动,而且所有的节点都同时开始运行,任务安排的目标是使最后结束计算的节点的完成时间尽可能早。

输入输出

输入文件名是hpc.in。

文件的第一行是对计算任务的描述,包括两个正整数 ,分别是A类和B类子任务的数目,两个整数之间由一个空格隔开。
文件的后面部分是对此计算机的描述:

文件第二行是一个整数p,即计算节点的数目。

随后连续的p行按顺序分别描述各个节点的信息,第i个节点由第i+2行描述,该行包括下述四个正整数(相邻两个整数之间有一个空格):

输出文件名是hpc.out。其中只有一行,包含有一个正整数,即从各节点开始计算到任务完成所用的时间。

样例

设输入文件hpc.in为

对应的输出文件hpc.out为

93

数据说明

测试数据

下载测试数据(1.67KB)

参考解答

]]>

泰戈尔《世界上最远的距离》

世界上最远的距离,不是生与死的距离,
而是我站在你面前,你不知道我爱你.
世界上最远的距离,不是我站在你面前,
你不知道我爱你,而是爱到痴迷,却不能说我爱你.
世界上最远的距离,不是我不能说我爱你,
而是想你痛彻心肺,却只能深埋心底.
世界上最远的距离,不是我不能说我想你,
而是彼此相爱,却不能在一起.
世界上最远的距离,不是彼此相爱,
却不能在一起,而是明知道真爱无敌,却装作毫不在意.
世界上最远的距离,不是树与树的距离,
而是同根生长的树枝,却无法在风中相依.
世界上最远的距离,不是树枝无法相依,
而是相互了望的星星,却没有交汇的轨迹.
世界上最远的距离,不是星星之间的轨迹,
而是纵然轨迹交汇,却在转瞬间无处寻觅.

 
世界上最远的距离,不是瞬间便无处寻觅,
而是尚未相遇,便注定无法相聚.

世界上最远的距离,是鱼与飞鸟的距离,
一个在天,一个却深潜海底.

——泰戈尔《世界上最远的距离》

摇滚童话 – Forever Young [ MP3! ]

摇滚童话 – Forever Young [ MP3! ] 中文名称:摇滚童话
英文名称:Forever Young
资源类型:MP3!
发行时间:2003年09月
专辑歌手:Various Artist
地区:美国
语言:英语
简介:
===- 『 Forever Young 』-===
艺人:V.A
唱片:Forever Young:摇滚童话
厂牌:环球
时间:2003/9 曲目 试听
1.We Will Rock You原唱:Queen
2.I Love Rock “N” Roll原唱:Joan Jett
3.Walk Like An Egyptian【原唱:Bangles】
4.Should I Stay Or Should I Go【原唱:The Clash】
5.Wot原唱:Captain Sensible
6.Tainted Love【原唱:Soft Cell】
7.Boys Don’t Cry【原唱:The Cure】
8.Shout原唱:Tears For Fears
9.Just Can’t Get Enough【原唱:Depeche Mode】
10.Highway To Hell【原唱:AC/DC】
11.Forever Young原唱:Alphaville
是否受够了70、80、90…各年代的老屁股选辑?你能想象超卡娃伊的「小鬼当家版」摇滚经典作吗?今年夏天,知名矿泉水品牌evian耗资三百万欧元在法、德、英展开跨国电视造势活动,广告主题曲别出心裁由几个小学生演唱皇后合唱团经典“WE WILL ROCK YOU”。超卡娃伊的童音立刻征服法国佬,单曲一推出迅速攻占法国排行榜亚军,短短两个礼拜内狂销五十万张,并盘据TOP 5整整六星期;不仅风靡各舞场,电台点播率也居高不下!法国环球唱片因此企划发行这张由小朋友翻唱80年代金曲的可爱合辑:首选必收evian矿泉水横扫法/德/英跨国广告曲“WE WILL ROCK YOU”,还有“SHOUT”、“WALK LIKE AN EGYPTIAN”、“FOREVER YOUNG”、“SHOULD I STAY OR SHOULD I GO”…等。 eMule 资源
http://lib.verycd.com/2004/12/30/0000032975.html
http://lib.verycd.com/2005/10/26/0000071289.html

Visual C# .NET 2003 语言的改变

摘要:为了与欧洲计算机制造商协会 (ECMA) 的 C# 规范完全兼容,Microsoft Corporation 对 C# 编译器的实现进行了几处改动。这些改动将在多方面影响现有的代码,因此用户必须检查他们的代码以确保这些代码符合 C# 编程语言必需的和推荐的使用要求。 目录 背景
C# 语言的新功能
实现的改变
小结
背景

2001 年年底,ECMA 将 C# 编程语言批准为一项标准 (ECMA-334)。为了与 Microsoft 在 C# 和公共语言接口 (CLI) 标准化进程方面的举措保持一致,Microsoft 遵循 ECMA C# 标准的精神和文字规范对 C# 编译器进行了几处小的改动。另外,Microsoft 在遵循 C# 标准规范的同时对 C# 实现作了一些额外的小改动,并更正了 C# 程序员遇到的一些编译器问题和错误。其中的每处改动都可能导致使用 Visual C# .NET 2002 版编译器编写的代码在用于 Visual C# .NET 2003 之前必须进行修改。
C# 语言的新功能 Visual C# .NET 2003 版的 C# 语言中添加了两个新功能。第一,编译器现在支持 #line hidden 预处理器指令。#line hidden 指令主要用于源代码生成器,它通知编译器忽略紧跟在 #line hidden 指令后面的所有代码行的调试程序信息,直到遇到下一个 #line 指令为止(该 #line 指令的调试程序信息也一并被忽略),这里假设它们中间不会立即碰到下一个 #line hidden 预处理指令。在下面的示例中,编译器生成了 IL 代码,其中的 WriteLine 语句不包含调试信息。这样,调试应用程序的程序员将无法查看“隐藏”的代码并检查其中的内容:

public class Customer
{

简单的加减乘除实例 C#

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace WinForm_p169_2
{
        /// <summary>
        /// Form2 的摘要说明。
        /// </summary>
        public class Form2 : System.Windows.Forms.Form
        {
                private System.Windows.Forms.ToolBar toolBar1;
                private System.Windows.Forms.ToolBarButton toolBarButton1;
                private System.Windows.Forms.ToolBarButton toolBarButton2;
                private System.Windows.Forms.ToolBarButton toolBarButton3;
                private System.Windows.Forms.ToolBarButton toolBarButton4;
                private System.Windows.Forms.Label label1;
                private System.Windows.Forms.Label label2;
                private System.Windows.Forms.TextBox textBox1;
                private System.Windows.Forms.TextBox textBox2;
                private System.Windows.Forms.StatusBar statusBar1;
                private System.Windows.Forms.StatusBarPanel statusBarPanel1;
                private System.Windows.Forms.StatusBarPanel statusBarPanel2;
                int a,b,x; // 运算所需的3个变量
                /// <summary>
                /// 必需的设计器变量。
                /// </summary>
                private System.ComponentModel.Container components = null;

                public Form2()
                {
                        //
                        // Windows 窗体设计器支持所必需的
                        //
                        InitializeComponent();

                        //
                        // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
                        //
                }

                /// <summary>
                /// 清理所有正在使用的资源。
                /// </summary>
                protected override void Dispose( bool disposing )
                {
                        if( disposing )
                        {
                                if(components != null)
                                {
                                        components.Dispose();
                                }
                        }
                        base.Dispose( disposing );
                }

                #region Windows 窗体设计器生成的代码
                /// <summary>
                /// 设计器支持所需的方法 - 不要使用代码编辑器修改
                /// 此方法的内容。
                /// </summary>
                private void InitializeComponent()
                {
                        this.toolBar1 = new System.Windows.Forms.ToolBar();
                        this.toolBarButton1 = new System.Windows.Forms.ToolBarButton();
                        this.toolBarButton2 = new System.Windows.Forms.ToolBarButton();
                        this.toolBarButton3 = new System.Windows.Forms.ToolBarButton();
                        this.toolBarButton4 = new System.Windows.Forms.ToolBarButton();
                        this.label1 = new System.Windows.Forms.Label();
                        this.label2 = new System.Windows.Forms.Label();
                        this.textBox1 = new System.Windows.Forms.TextBox();
                        this.textBox2 = new System.Windows.Forms.TextBox();
                        this.statusBar1 = new System.Windows.Forms.StatusBar();
                        this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel();
                        this.statusBarPanel2 = new System.Windows.Forms.StatusBarPanel();
                        ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).BeginInit();
                        ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel2)).BeginInit();
                        this.SuspendLayout();
                        //
                        // toolBar1
                        //
                        this.toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] {
                                                                                                                                                                                this.toolBarButton1,
                                                                                                                                                                                this.toolBarButton2,
                                                                                                                                                                                this.toolBarButton3,
                                                                                                                                                                                this.toolBarButton4});
                        this.toolBar1.DropDownArrows = true;
                        this.toolBar1.Location = new System.Drawing.Point(0, 0);
                        this.toolBar1.Name = "toolBar1";
                        this.toolBar1.ShowToolTips = true;
                        this.toolBar1.Size = new System.Drawing.Size(292, 41);
                        this.toolBar1.TabIndex = 0;
                        this.toolBar1.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.toolBar1_ButtonClick);
                        //
                        // toolBarButton1
                        //
                        this.toolBarButton1.Tag = "+";
                        this.toolBarButton1.Text = "加";
                        //
                        // toolBarButton2
                        //
                        this.toolBarButton2.Tag = "-";
                        this.toolBarButton2.Text = "减";
                        //
                        // toolBarButton3
                        //
                        this.toolBarButton3.Tag = "*";
                        this.toolBarButton3.Text = "乘";
                        //
                        // toolBarButton4
                        //
                        this.toolBarButton4.Tag = "/";
                        this.toolBarButton4.Text = "除";
                        //
                        // label1
                        //
                        this.label1.Location = new System.Drawing.Point(27, 79);
                        this.label1.Name = "label1";
                        this.label1.Size = new System.Drawing.Size(63, 27);
                        this.label1.TabIndex = 1;
                        this.label1.Text = "第一个数";
                        //
                        // label2
                        //
                        this.label2.Location = new System.Drawing.Point(25, 133);
                        this.label2.Name = "label2";
                        this.label2.Size = new System.Drawing.Size(63, 27);
                        this.label2.TabIndex = 2;
                        this.label2.Text = "第二个数";
                        //
                        // textBox1
                        //
                        this.textBox1.Location = new System.Drawing.Point(94, 77);
                        this.textBox1.Name = "textBox1";
                        this.textBox1.Size = new System.Drawing.Size(129, 21);
                        this.textBox1.TabIndex = 3;
                        this.textBox1.Text = "0";
                        //
                        // textBox2
                        //
                        this.textBox2.Location = new System.Drawing.Point(92, 130);
                        this.textBox2.Name = "textBox2";
                        this.textBox2.Size = new System.Drawing.Size(129, 21);
                        this.textBox2.TabIndex = 4;
                        this.textBox2.Text = "0";
                        //
                        // statusBar1
                        //
                        this.statusBar1.Location = new System.Drawing.Point(0, 251);
                        this.statusBar1.Name = "statusBar1";
                        this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
                                                                                                                                                                                  this.statusBarPanel1,
                                                                                                                                                                                  this.statusBarPanel2});
                        this.statusBar1.ShowPanels = true;
                        this.statusBar1.Size = new System.Drawing.Size(292, 22);
                        this.statusBar1.TabIndex = 5;
                        this.statusBar1.Text = "statusBar1";
                        //
                        // statusBarPanel1
                        //
                        this.statusBarPanel1.Text = "结果";
                        //
                        // Form2
                        //
                        this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
                        this.ClientSize = new System.Drawing.Size(292, 273);
                        this.Controls.Add(this.statusBar1);
                        this.Controls.Add(this.textBox2);
                        this.Controls.Add(this.textBox1);
                        this.Controls.Add(this.label2);
                        this.Controls.Add(this.label1);
                        this.Controls.Add(this.toolBar1);
                        this.Name = "Form2";
                        this.Text = "Form2";
                        ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit();
                        ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel2)).EndInit();
                        this.ResumeLayout(false);

                }
                #endregion
                // 函数验证是否为数字
                public bool IsNumeric(string str)
                {
                        try
                        {
                                // 先判断是否为整形
                                Int32.Parse(str);
                        }
                        catch
                        {
                                // 在判断是否为浮点型
                                try
                                {
                                        Double.Parse(str);
                                }
                                catch
                                {
                                        return false;
                                }
                        }
                        return true;
                }

                // 运算函数
                public void NumOperation(string o)
                {
                        // 判断输入是否为空
                        if((textBox1.Text!=null)||(textBox2.Text!=null))
                        {
                                // 判断是否为数字
                                if(!IsNumeric(textBox1.Text)||!IsNumeric(textBox2.Text))
                                {
                                        this.textBox1.Text="0";
                                        this.textBox2.Text="0";
                                }
                                else
                                {
                                        // 转换输入的2个字符串为数字
                                        a=System.Convert.ToInt32(this.textBox1.Text);
                                        b=System.Convert.ToInt32(this.textBox2.Text);
                                        if(o=="+")
                                                x=a+b;
                                        if(o=="-")
                                                x=a-b;
                                        if(o=="*")
                                                x=a*b;
                                        if(o=="/")
                                                if(b==0)
                                                {
                                                        MessageBox.Show("除数不能为0!");
                                                        this.textBox2.SelectAll();
                                                }
                                                else
                                                        x=a/b;
                                        // 显示结果
                                        statusBarPanel2.Text=x.ToString();
                                }
                        }
                }

                private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
                {
                        // 调用按钮
                        this.NumOperation(e.Button.Tag.ToString());
                }
        }
}

 

Hello百度~

偶然发现了百度的空间. 就赶快测试一下.

Hello百度~

]]>

Visual C# .NET 2003

ÕªÒª£ºÎªÁËÓëÅ·ÖÞ¼ÆËã»úÖÆÔìÉÌЭ»á (ECMA) µÄ C# ¹æ·¶ÍêÈ«¼æÈÝ£¬Microsoft Corporation ¶Ô C# ±àÒëÆ÷µÄʵÏÖ½øÐÐÁ˼¸´¦¸Ä¶¯¡£ÕâЩ¸Ä¶¯½«ÔÚ¶à·½ÃæÓ°ÏìÏÖÓеĴúÂ룬Òò´ËÓû§±ØÐë¼ì²éËûÃǵĴúÂëÒÔÈ·±£ÕâЩ´úÂë·ûºÏ C# ±à³ÌÓïÑÔ±ØÐèµÄºÍÍÆ¼öµÄʹÓÃÒªÇó¡£
Ŀ¼
±³¾°
C# ÓïÑÔµÄй¦ÄÜ
ʵÏֵĸıä
С½á

±³¾°

2001 ÄêÄêµ×£¬ECMA ½« C# ±à³ÌÓïÑÔÅú׼ΪһÏî±ê×¼ (ECMA-334)¡£ÎªÁËÓë Microsoft ÔÚ C# ºÍ¹«¹²ÓïÑÔ½Ó¿Ú (CLI) ±ê×¼»¯½ø³Ì·½ÃæµÄ¾Ù´ë±£³ÖÒ»Ö£¬Microsoft ×ñÑ­ ECMA C# ±ê×¼µÄ¾«ÉñºÍÎÄ×ֹ淶¶Ô C# ±àÒëÆ÷½øÐÐÁ˼¸´¦Ð¡µÄ¸Ä¶¯¡£ÁíÍ⣬Microsoft ÔÚ×ñÑ­ C# ±ê×¼¹æ·¶µÄͬʱ¶Ô C# ʵÏÖ×÷ÁËһЩ¶îÍâµÄС¸Ä¶¯£¬²¢¸üÕýÁË C# ³ÌÐòÔ±Óöµ½µÄһЩ±àÒëÆ÷ÎÊÌâºÍ´íÎ󡣯äÖеÄÿ´¦¸Ä¶¯¶¼¿ÉÄܵ¼ÖÂʹÓà Visual C# .NET 2002 °æ±àÒëÆ÷±àдµÄ´úÂëÔÚÓÃÓÚ Visual C# .NET 2003 ֮ǰ±ØÐë½øÐÐÐ޸ġ£
C# ÓïÑÔµÄй¦ÄÜ
Visual C# .NET 2003 °æµÄ C# ÓïÑÔÖÐÌí¼ÓÁËÁ½¸öй¦ÄÜ¡£µÚ
Àà±ð£º³ÌÐò´úÂ렲鿴ÆÀÂÛ]]>

既身心疲惫,又贫穷潦倒的一天!

今天真的是我既身心疲惫,又贫穷潦倒的一天!
其实这周都很不好,到今天真的有必要说一下.
从昨天凌晨说起.
00:04 回到家,发现煤火竟然灭了,搬到新家不到半月已经灭火了3次了!
父亲不知怎么了,最近一直上连班,5点多早班走,12点多中班回来.
我偶尔出去久了火就会灭,习惯熬夜的我半夜想做点东西吃,也只有忍住.
洗澡也是个大问题! 没有天然气的日子,也许还要很久才能适应. 早上7点闹钟响起,我赶忙穿衣起来,休了一周该上课.
现在对上课有一种期待,只是上课才会不那么无聊,期待着早点上完才能工作.
我走时,父亲还在用炭生火.
来到学校,上了电梯,还在庆幸没有迟到.
到了教师发现没有一个人,他们全迟到了!?
沉思了一会看了下排课表,看看手机. 明天才上课,我记错了!
没有马上回家,想给李哥打电话要我的钱,却只剩3毛的话费了.想给妈打个电话,钱却没有拿到.
慢无目的走到她单位门口,看到她的车.木木的站了一会.
回到家真不知做什么好.躺在床上,看着凌乱的新家.索性睡着了.
不久被父亲翻箱倒柜弄行,又不久被楼下狗叫惊醒.
我坚持着闭着眼不起来.
手机想起,永生他哥说让我下午帮他整电脑,我说马上就就去. 本以为百货楼离火车站很近,再到陇海路也就再多一个路口,便走路过去,到了再转车.
走到才发现原来真的不近.
到了,重装了系统,更新补丁,吃了捞面,又装了些必须的软件.
3点多都已无事了,突然想去看下她.
于是3点55用我仅有的一个一元硬币坐上了公车.
坐我后面的一个女孩的确挺漂亮的.
4点10分到了银基,几乎一路小跑.4点20到了二七广场.在人流中依然跑跑停停.
4点半来到了金水路口.一秒没有停歇. 继续前进,走到经八路口看到了那个黑衣的幽灵,面色看着不大好.
我几乎和她平行,没看到我,我向前跑,赶到她到下个路口之前到.
她比我快,刚到路口就亮了,她转了弯,我赶不上了,大声叫了她的名字,没听到!
我继续跑,一直跑到见不到了人.
无奈打了电话,让她帮我交下话费,她说听不清!
说在前面等我,我像阿甘一样继续跑着,5分钟跑了3个路口,我还是失去了她.
我在路边大口喘着粗气,仿佛以前在运动会上一样.
电话想起,她说在二七路,我无语了. 我白跑了!方向不对!
她又问我什么事,我又说了N变,她终于听清交话费了.却问我去哪交?
我说算了,不用了.一股的失落感顷刻泼向我,就像失去她那样!
挂了电话,我又跑起,我不只为了让她帮我交话费,还为见她下.哪怕她没看到我.
又跑到金水路口,电话想起,她说交过了,我不知道说什么,只说了谢谢. 我总是时常的这样感觉,一会倍感失落,一会自我欣慰.感觉真是天堂与地狱. 我继续跑,到了她说的地方,转了很久没有见到.
隐约的脚痛,屁股酸酸. 身上很累了,但气还不很喘.
全身疲惫,一无分文,烟也没有,手机还是她帮我交的费.
站在繁华的二七路边,我倍感压抑.
给李哥打了电话,他还在外地,钱还没有着落.
好久鼓起勇气给母亲打了电话,母亲说来吃饭把,生日今天晚上过.
我说不去了,我心里知道,许诺过母亲的生日我包办的,却没办成.
母亲说还记得她的生日就很高兴了,没事,改天请她吃顿便饭就行了.
还问我买衣服了吗,和她还好吗? 我说买了,她又问给她买了吗? 我说也买了. 挂了电话,我差点哭出来.
几年了,我辞职没上班,母亲一直总在帮助我,总在我最需要的时候给我鼓励帮助.
可我许诺母亲,这次项目的薪水给母亲过生日的,却没有做到.
给自己买过了东西,却连样礼物都没给她买.
母亲却还想着我,关心我这,关心我那,甚至她.
回到家,脱鞋时发现脚上起了2个水泡.家里连个针都找不到!
吃了2口剩饭,然后倒掉了.接着看了<爱在哈佛>的最后一集,然后我独自躺在床上感动着. 阿姨回来了,问我吃了吗? 我说吃了.
她知道我没吃什么,给了我张50的,说:你爸也不给你钱,给你点用了方便,没人了吃好饭.
我说不要,借给我5块坐车用都够了,最后我拿了10块出去了,没有吃饭,买了烟转了回了.
接着写了这些!
最后还有几句话想说: 这世上没有哪个女人会为我哭泣,只有母亲,祝你生日快乐!
这世上没有山盟海誓的爱情,只有一时冲动的激情! 以后我会记住:Just do 'speed' and 'passion', maybe life is like this ! 最后谢谢让我感悟的所有人! ]]>