SHU-2016-SummerPractice / AlgorithmExerciseIssues

算法训练相关文件及工单。
https://github.com/SHU-2016-SummerPractice/AlgorithmExerciseIssues/issues
2 stars 0 forks source link

模拟题(1) 2016-07-11 #3

Open zhaokuohaha opened 8 years ago

zhaokuohaha commented 8 years ago

POJ1006

LeetCode 57

wolfogre commented 8 years ago
//AC LeetCode57
/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
        vector<Interval> result;
        bool inserted = false;
        for(auto it : intervals)
        {
            if(!inserted)
            {
                if(it.start <= newInterval.start && it.end >= newInterval.end)
                    return intervals;
                if(it.start >= newInterval.start && it.end <= newInterval.end)
                    continue;
                if(it.start < newInterval.start && it.end >= newInterval.start)
                {
                    newInterval.start = it.start;
                    continue;
                }
                if(it.start <= newInterval.end && it.end > newInterval.end)
                {
                    newInterval.end = it.end;
                    continue;
                } 
                if(it.start > newInterval.end)
                {
                    result.push_back(newInterval);
                    inserted = true;
                }
            }
            result.push_back(it);
        }
        if(!inserted)
            result.push_back(newInterval);
        return result;
    }
};
dayang commented 8 years ago

POJ 1006 中国剩余定理(孙子定理,一次同余方程组)

import java.util.*;
import java.lang.Math;
import java.text.*;

public class Main {   
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int p,e,i,d;
        int time = 1;
        while(cin.hasNext()){
            p = cin.nextInt();
            e = cin.nextInt();
            i = cin.nextInt();
            d = cin.nextInt();
            if(p==-1 && e==-1 && i==-1 && d==-1)  
                break;
            int n=(5544*p+14421*e+1288*i-d+21252)%21252; 
            if(n==0)  
                n=21252;
            System.out.println("Case " + (time++) + ": the next triple peak occurs in " + n +" days.");
        }
    } 
}  
dayang commented 8 years ago
// LeetCode 57 AC
/**
 * Definition for an interval.
 * function Interval(start, end) {
 *     this.start = start;
 *     this.end = end;
 * }
 */
/**
 * @param {Interval[]} intervals
 * @param {Interval} newInterval
 * @return {Interval[]}
 */
var insert = function(intervals, newInterval) {
    var flag = true;
    var res = [];

    if(intervals.length === 0){
        res.push(newInterval);
        return res;
    }

    intervals.forEach(function(interval){
        if(interval.end < newInterval.start)
            res.push(interval);
        else if(interval.start > newInterval.end){
            if(flag){
                res.push(newInterval);
                flag = false;
            }
            res.push(interval);
        }else{
            newInterval.start = Math.min(newInterval.start, interval.start);
            newInterval.end = Math.max(newInterval.end,interval.end);
        }
    });

    if(flag){
        res.push(newInterval);
    }

    return res;
};
wolfogre commented 8 years ago

POJ1006描述

一些人相信从出生开始,人的一生伴随这三种周期,分别是体力周期,情绪周期和智力周期,各周期的时长分别为23天,28天,和33天,每种周期内拥有一个峰值点,一个人在峰值点上,他相应的特质(体力,情绪或智力)将会达到最佳。比如,当处在智力周期的峰值点上,人很容易拥有清晰和深邃的思维。

因为各周期拥有不同的时长,三各周期峰值点将在不同的时间出现,我们想试图确定超级峰值点(三个峰值点出现在同一天)出现的时间。对于每一种周期,我们将给出一个今年出现的峰值点时间(不一定是第一个),同时我们将给出一个日期表示这是今天的第几天,你的任务是确定下一个超级峰值点发生在多少天之后(不计今天,比如今天是10号,下个超级峰值点发生在在12号,则答案是2天,不是3天)。如果今天已经是超级峰值点,则依旧计算下一个超级峰值点发生在多少天之后。

zhaokuohaha commented 8 years ago

LeetCode-57-C#

/**
 * Definition for an interval.
 * public class Interval {
 *     public int start;
 *     public int end;
 *     public Interval() { start = 0; end = 0; }
 *     public Interval(int s, int e) { start = s; end = e; }
 * }
 */

 public class Solution
    {
        public IList<Interval> Insert(IList<Interval> intervals, Interval newInterval)
        {
            List<Interval> ret = new List<Interval>();
            if(intervals.Count == 0) { ret.Add(newInterval); return ret; }
            int i = 0;

            while(i < intervals.Count && intervals[i].end < newInterval.start)
            {
                ret.Add(new Interval { start = intervals[i].start, end = intervals[i].end });
                i++;
            }

            while(i < intervals.Count && newInterval.end >= intervals[i].start )
            {
                newInterval.end = System.Math.Max(newInterval.end, intervals[i].end);
                newInterval.start = System.Math.Min(newInterval.start, intervals[i].start);
                i++;
            }
            ret.Add(newInterval);

            while (i < intervals.Count)
            {
                ret.Add(new Interval { start = intervals[i].start, end = intervals[i].end });
                i++;
            }
            return ret;
        }
    }
SnackMen commented 8 years ago

POJ 1006 普通模拟方法 Time Exceeded

import java.util.Scanner;

/**
 * Created by laowang on 2016/7/11.
 */
public class Main {
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        int p=scanner.nextInt();
        int e=scanner.nextInt();
        int i=scanner.nextInt();
        int d=scanner.nextInt();
        int n=0;
        while (p!=-1 && e!=-1 && i!=-1 && d!=-1){
            int f=0;
            p=p%23;
            e=e%28;
            i=i%33;
            if(p==0 && e==0 && i==0){
                System.out.println("Case "+(++n)+":"+" the next triple peak occurs in 21252 days.");
            }else{
                int n1=(21252+23-p)/23;
                int n2=(21252+28-e)/28;
                int n3=(21252+33-i)/33;
                for(int j=1;j<=n1;j++){
                    for(int k=1;k<=n2;k++){
                        for(int l=1;l<=n3;l++){
                            if(p+(j-1)*23 == e+(k-1)*28 && e+(k-1)*28 == i+(l-1)*33){
                                System.out.println("Case "+(++n)+":"+" the next triple peak occurs in "+(p+(j-1)*23-d)+" days.");
                                f=1;
                                break;
                            }
                        }
                        if(f==1)
                            break;
                    }
                    if(f==1)
                        break;
                }
            }
            p=scanner.nextInt();
            e=scanner.nextInt();
            i=scanner.nextInt();
            d=scanner.nextInt();
        }
    }

}