编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:    Password: 
  登记 登记    
 Ecoo 2010年决赛
指数 -> 竞赛
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
沙翠




 邮政 发布: 2010年5月01日星期六下午3:00  帖子主题:Ecoo 2010总裁

好吧,那很有趣。

恭喜唐米尔斯CI#1为今年的赢得ECOO决赛,惊人的分数为563,所有4个问题都有47分钟的惊人时间。此外,祝贺Woburn Ci#1和Lisgar CI,分数为542的分数。至少可以说是令人兴奋的。

谢谢York University和所有Ecoo代表和教练,使这件事成为可能。

如果有人关心,我们的学校排名第9(A.Y Jackson#1)。我们的得分分解为:110,80,110,110。
很酷,有些你在明年也是如此  微笑

现在讨论问题。
我主要对问题#2感兴趣。
有没有人使用奇怪的启发式DP方法?我想知道最好的解决方案......

对于那些没有问题的人,我发布了一个.jpg版本。



Ecoo#2.jpg.
 Description:
 Filesize:  1.23 MB
 Viewed:  417 Time(s)

Ecoo#2.jpg.


赞助
赞助
 赞助
 赞助
Cyril.




 邮政 发布: 2010年5月01日星期六下午3:59  帖子主题:Re:Ecoo 2010总裁

啊,这是运气。 Woburn有计算机烦恼和SM(我将此作为愚蠢错误的缩写)。布莱恩将声称我是谦虚的,但我们将在第2阶段看到。

对于#2,我们使用了BFS。轴是独立的。将p(v,t)定义为从0到t的最短时间,从速度v开始。答案只有max(p(v,250-x),p(0,105))。

计算P(v,t),保持三元的队列:( pos,vel,time)。推(0,v,-1)。然后,循环:

流行前三重F,如果f.pos = t和f.vel = 0,则返回时间。否则,推(f.pos + f.vel,f.vel,f.time + 1),(f.pos + f.vel + 1,f.vel + 1,f.time + 1),以及(f .pos + f.vel-1,f.vel-1,f.time + 1)。

slooooooow。我们围绕这一点的便宜方式是为了保留之前访问的(POS,VEL)。至于界限,| POS |< 50000 and |vel| <500给出了正确的答案,所以我们使用了一个启发式(即愚蠢的赌博)并希望小测试数据。

正如Brian所建议的那样,最佳解决方案可能是*搜索。
SaltPro15




 邮政 发布: 2010年5月1日星期六下午4:35  帖子主题:Re:Ecoo 2010总裁

使用next_permolged + bash for q3。

我的功能出现了问题,用于查找Q4的除数和,它只得到60/100。

Used atan instead of atan2 for Q1, a teammate changed that on the car ride home and it would've worked perfectly >.>

没有尝试Q2。

我们失败了。  伤心
zle.




 邮政 发布: 2010年5月01日星期六下午6:09  帖子主题:Re:Ecoo 2010总裁

我们(嗯,另外两个其他团队成员)分开处理X和Y,计算到暗示一个维度所需的速度顺序,并返回两个序列的最大长度。有趣的是,由于起始Y坐标和结束Y坐标是恒定的,因此在Y尺寸中到达目标的序列也是恒定的。

我通过他们的代码读;看起来这些是关键点:
*在某些时候,您的速度必须转零
*初始速度和停止之间(v = 0),您必须距离
*在理想的解决方案中,只有当从初始速度停下来的距离大于从起点到仙境的距离时,你都会过冲

*如果速度a是达到的最大速度,您将至少旅行
*如果速度a不是最大速度,您将至少旅行2a单位
*如果通过传播您的单位,您会过度地过冲,您将永远不会在最佳解决方案中达到这种速度
*如果您可以更快地速度而不会过度冲进,则您不是在看最佳解决方案

它们通过再次使用v = 0调用函数来处理必要的过冲,作为新起始点和距离,以行驶的距离是从停止点到目标的距离。

......这是faaaaast。测试用例在我的计算机上运行秒。

我想知道的是其他人都做了问题4(数字的总和)。我们最终在最后十分钟内汇总了我们的大部分代码并在最后十分钟中致以蛮力解决方案,只有在20000年下方的价值观,哈哈哈。感觉就像我们错过了真的,真的很明显......似乎其他人早早有110个问题  非难 [/列表] [/列表]
A.J.




 邮政 发布: 2010年5月01日星期六下午6:38  帖子主题:Re:Ecoo 2010总裁

对于几乎友好的数字问题,您基本上从SOD(x)向外寻找数字Y,使得从X到SOD(Y)的距离小于y到SOD(x)的距离。我们的代码如下:
clusplus:

#包括<iostream>
#包括<cmath>
使用命名空间std;
㈡ d(int x)
{
    int temp = 0;
    for (int i = 1; i <= floor(sqrt(x)); i++)
    {
        if (x%i==0)
        {
            if ((x/i)!=i) temp += ((x/i)+i);
            else temp += i;
        }
    }
    temp -= x;
    return temp;
}

㈡ main()
{
    freopen("DATA41.txt", "r", stdin);
    int x, sod;
    for (int ii = 0; ii < 5; ii++)
    {
        cin >> x;
        sod = d(x);
       int ans = 0,m = 9999;
        for (int deg = 0;; deg++)
        {
            bool done = 0;
           int = sod + deg,down = sod - deg;
            int temp = d(up), temp2 = d(down);
            if (abs(x - temp) <= deg)
            {
                ans = up;
                done = 1;
            }
            if (abs(x - temp2) <= deg)
            {
                ans = down;
                done = 1;
            }
            if (done)
            {
                cout << ans << " is friendly to " << x << " of degree " << deg << endl;
                break;
            }
        }
    }
    return 0;
}
SaltPro15




 邮政 发布: 2010年5月1日星期六7:01 PM  帖子主题:Re:Ecoo 2010总裁

Q1的某人可以邮寄代码吗?
zle.




 邮政 发布: 2010年5月01日星期六7:24 PM  帖子主题:Re:Ecoo 2010总裁

http://codepad.org/39QyU8tQ

这是我们的Q1(连接点)的解决方案。它是在Codepad上,因为我是语法突出显示的粉丝。我们开始使用Trig,通过Y值进行排序(左侧高到低电平,右侧低到高),得到零测试用例(WOOO!),回到三角队,实现了你必须使用斜坡和不仅仅是y值,而且当然,没有第一次尝试奖金)。
沙翠




 邮政 发布: 2010年5月01日星期六晚上7:37  帖子主题:Re:Ecoo 2010总裁

所有以下解决方案都在Java中。

问题一

代码:

   import java.util.*;
   import java.io.*;
   
    class Q1 {
       公共静态空白主(String[] args)抛出ioException {
         Scanner S =新扫描仪(new File ("DATA11.txt"));
         for (int u=0;u<5;u++){
            int num =s.nextInt();
           int [] x = new int [num];
           int [] y = new int [num];
           Double [] D =新的Double [num];
            int sumx=0;
            int sumy=0;
            for (int i=0;i<num;i++){
               x[i] = s.nextInt();
               y[i] = s.nextInt();
               sumx+=x[i];
               sumy+=y[i];
            }
            double avgx = (double)sumx/num;
            double avgy = (double)sumy/num;
           
            for (int i=0;i<num;i++){
               双温度= math.atan((double)Math.abs(y[i]-avgy)/(double)Math.abs(x[i]-avgx))*180/Math.PI;
               if (x[i]>avgx){
                  if (y[i]>avgy)
                     d[i]=270+temp;
                  else
                     d[i]=270-temp;
               }
               else{
                  if (y[i]>avgy)
                     d[i]=90-temp;
                  else
                     d[i]=90+temp;
               }
            }
           
            int down=0;
            int up=0;
           
            for(int i = 0; i < num-1; i++){
               for(int j = 0; j < num-1; j++){
                  if(d[j] > d[j+1]){
                     double tmp = d[j];
                     d[j] = d[j+1];
                     d[j+1] = tmp;
                     int tmp1 = x[j];
                     x[j] = x[j+1];
                     x[j+1] = tmp1;
                     tmp1 = y[j];
                     y[j] = y[j+1];
                     y[j+1] = tmp1;
                  }
               }
            }
                
            for (int i=0;i<num-1;i++){
               down+=x[i]*y[i+1];
               up+=x[i+1]*y[i];
            }
           向下+ = x [num-1] * y [0];
            up+=x[0]*y[num-1];
         
     
            System.out.println ("The area of the "+num+" sided polygon is "+(double)Math.abs(down-up)/2);
         }
      }
   }


问题二(不是解决方案!但仍然有4/5 Looool,这是有趣的& rushed  非难 )

代码:

   import java.io.*;
   import java.util.*;
   
    class Q2 {
       公共静态空白主(String[] args)抛出ioException {
         Scanner S =新扫描仪(new File ("DATA21.txt"));
         for (int o=0;o<5;o++){
            int v = s.nextInt();
            int x = s.nextInt();
            int d = 250-x;
            int day = 0;
            int sum = 0;
         
            if (d<0){
               v=-v;
               d=-d;
            }

            if (v>0){
               for (int i=1;i<=v;i++){
                  day+=1;
                  sum+=i;
               }
            }

            else {
               for (int i=v;i<0;i++){
                  day+=1;
                  sum+=i;
               }
               
            }
                 
            d-=sum;
            if (d<0){
               v=0;
               d=-d;
               day-=1;
            }
         
            int counter = 1;
            int dtemp=d;
           
            while (dtemp>0){
               dtemp -= (v+counter)*2;
               counter+=1;
               day+=2;
            }
            dtemp+=v+counter;
         
         
            if (dtemp<0)
           {反击 - = 1;日 - = 2;}
            else{
               day-=1;
            }

            if (dtemp!=0){
               day+=1;
            }
                 
            if (day<20){
               day=20;
            }
         
            System.out.println ("预计抵达时间是在"+day+" days");
         }
      }
   }


问题3.

代码:

   import java.io.*;
   import java.util.*;

    class Q3 {
       公共静态空白主(String[] args)抛出ioException {
         BufferedReader S =新BufferedReader(new FileReader ("DATA31.txt"));
         perm("");
         for(int pp = 0; pp < 5; pp++){
           char [] [] [] map = new char [5] [5];
            for(int j = 0; j < 5; j++){
               map[j] = s.readLine().trim().toCharArray();
            }
           
            for(int j = 0; j < arr.size(); j++){
               map[0][0] = arr.get(j).charAt(0);
               map[0][2] = arr.get(j).charAt(1);
               map[0][4] = arr.get(j).charAt(2);
               map[2][0] = arr.get(j).charAt(3);
               map[2][2] = arr.get(j).charAt(4);
               map[2][4] = arr.get(j).charAt(5);
               map[4][0] = arr.get(j).charAt(6);
               map[4][2] = arr.get(j).charAt(7);
               map[4][4] = arr.get(j).charAt(8);
               if(isValid(map)){
                  for(int k = 0; k < 5; k++){
                     for(int l = 0; l < 5; l++){
                        System.out.print(map[k][l]);
                     }
                     System.out.println();
                  }
                  System.out.println();
                  break;
               }
            }
         }
      }
      static ArrayList<String> arr = new ArrayList<String>();
     
       static void perm(String cur){
         if(cur.length() == 9){
            arr.add(cur);
         }
         for(int i = 1; i <= 9; i++){
            if(cur.indexOf(String.valueOf(i)) == -1){
               perm(cur + String.valueOf(i));
            }
         }
      }
       
       静态布尔Isvalid.(char[][] map){
         for(int i = 0; i < 5; i+=2){
            if(!proc(map[i])){
               return false;
            }
         }
         for(int i = 0; i < 5; i+=2){
           char [] jj = new char [5];
            for(int j = 0; j < 5; j++){
               jj[j] = map[j][i];
            }
            if(!proc(jj)){
               return false;
            }
         }
         return true;
      }
     
       static boolean proc(char[] a){
         if(a[1] == '+'){
            if((Integer.valueOf(String.valueOf(a[0])) + Integer.valueOf(String.valueOf(a[2])))%10 ==(String.valueOf(a[4]))){
               return true;
            }
         }
         else if(a[1] == '-'){
            if((Integer.valueOf(String.valueOf(a[0])) - Integer.valueOf(String.valueOf(a[2]))+10)%10 ==(String.valueOf(a[4]))){
               return true;
            }
         }
         else if(a[1] == '*'){
            if((Integer.valueOf(String.valueOf(a[0])) * Integer.valueOf(String.valueOf(a[2])))%10 ==(String.valueOf(a[4]))){
               return true;
            }
         }
         return false;
      }
   }


问题4.

代码:

   import java.io.*;
   import java.util.*;

    class Q4 {
     静态奇数= 9999999;
       公共静态空白主(String[] args)抛出ioException {
         Scanner S =新扫描仪(new File ("DATA41.txt"));
         for (int j = 0; j < 5; j ++){
            int n = s.nextInt();
            int sn = sod(n);
            int best = 0;
            int bestd = 999999;
         
            for (int a = n; a < 2*n; a ++){
               int sa = sod(a);
               int t = deg(n,sn,a,sa);
               if (t < bestd){
                  bestd = t;
                  best = a;
               }
            }
            for (int a = n; a > n/odd; a --){
               int sa = sod(a);
               int t = deg(n,sn,a,sa);
               if (t < bestd){
                  bestd = t;
                  best = a;
               }
            }
         
           
            System.out.println(best + " is friendly to " + n + " of degree " + bestd);
         }
      }
       static int sod (int n ){
         int sum = 1;
         
         for (int i = 2; i*i<=n; i ++){
            if (n%i==0){
               int a = n/i;
               if (a < odd)
                  odd = a;
               if ( a == i){
                  sum+=i;
               }
               else{
                  sum+= a + i;
               }
            }
         
         }
         return sum;
      }
     
       static int deg (int a,int da,int b,int db){
         return ((int)Math.max(Math.abs(a - db),Math.abs(b - da)));
      }
   }


对于那些没有它的人来说,我也将添加其他3个问题.JPG格式。



Ecoo#4.jpg.
 Description:
 Filesize:  737.29 KB
 Viewed:  309 Time(s)

Ecoo#4.jpg.



Ecoo#3.jpg.
 Description:
 Filesize:  1.15 MB
 Viewed:  251 Time(s)

Ecoo#3.jpg.



Ecoo#1.jpg.
 Description:
 Filesize:  815.48 KB
 Viewed:  290 Time(s)

Ecoo#1.jpg.


赞助
赞助
 赞助
 赞助
Cyril.




 邮政 发布: 2010年5月01日星期六晚上7:53  帖子主题:Re:Ecoo 2010总裁

我们还考虑了一种快速贪婪的事情,但由于某种原因,我相信有一些令人讨厌的情况失败。显然,贪婪的工作。好的解决方案!
Corriep.




 邮政 发布: 孙5月02日2010年6:59 AM  帖子主题:Re:Re:Ecoo 2010 Finals

A.J. @ 5月01日2010年6:38 PM写道:
对于几乎友好的数字问题,您基本上从SOD(x)向外寻找数字Y,使得从X到SOD(Y)的距离小于y到SOD(x)的距离。我们的代码如下:
你是认真的吗?!我们失败了这个问题,因为我们放了 等于 代替 小于或等于

我很生气!>:|

此外,Cyril,停止如此谦虚!你赢了,自豪!
BBI5291




 邮政 发布: Sun 5月02日,2010年10:08 AM  帖子主题:Re:Re:Ecoo 2010 Finals

Cyril. @ 5月01日星期六下午3:59写道:
啊,这是运气。 Woburn有计算机烦恼和SM(我将此作为愚蠢错误的缩写)。布莱恩将声称我是谦虚的,但我们将在第2阶段看到。
哦,已经停止了。你赢得了Ecoo Fair和Square。 CCC阶段2的结果可能是更好的编码者是谁的更好指标,但在盛大的事物中令人惊讶地无关紧要。
Cyril.




 邮政 发布: Sun 5月02日,2010年1:37下午1:37  帖子主题:Re:Ecoo 2010总裁

幸运是公平和广场;我不否认。但是,我认为它并不能证明任何关于编码能力的任何东西,我必须确保它是明显的,即哪些团队是最好的,而不是哪个团队表现最佳。
SaltPro15




 邮政 发布: Sun 5月02日,2010年1:51 PM  帖子主题:Re:Re:Ecoo 2010 Finals

Corriep @ Sun 5月02日,2010年3月2日写道:
你是认真的吗?!我们失败了这个问题,因为我们放了 等于 代替 小于或等于

我很生气!>:|

此外,Cyril,停止如此谦虚!你赢了,自豪!


所以基本上我们因atan vs atan2和atan2而失去了200分< vs <=。有时候我真的很讨厌编程......
从上一个显示帖子:   
    指数 -> 竞赛
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

11  [ 13 Posts ]
跳到:    


Style:  
搜索: