निम्नलिखित Google कोड जैम 1C प्रश्न पर विचार करें :
चीन की महान दीवार एक अनंत रेखा के रूप में शुरू होती है, जहां सभी स्थानों पर ऊंचाई ।
कुछ संख्याएँ जनजातियाँ , , दीवार पर निम्न मापदंडों के अनुसार दीवार पर हमला करेंगी - एक प्रारंभ दिवस, , एक प्रारंभ शक्ति , एक शुरुआत पश्चिम-समन्वय, और एक आरंभ पूर्व-समन्वय, । यह पहला हमला दिन पर होता है , , ताकत । यदि भीतर महान दीवार का कोई हिस्सा है जिसकी ऊंचाई , तो हमला सफल होता है, और दिन के अंत में, दीवार को ऐसे बनाया जाएगा कि उसका कोई भी खंड भीतर हो ऊँचाई तब ऊँचाई पर होगीएन ≤ 1000 डी एस डब्ल्यू ई डी [ डब्ल्यू , ई ] एस [ डब्ल्यू , ई ] < एस [ डब्ल्यू , ई ] < एस एस (या अधिक, अगर उस दिन कुछ अन्य हमला साथ एक ही खंड पर मारा गया तो )
प्रत्येक जनजाति पीछे हटने से पहले हमले करेगी, और प्रत्येक हमले को इससे पहले एक से पुनरावृत्त रूप से निर्धारित किया जाएगा। प्रत्येक जनजाति के पास कुछ , , और जो हमलों के उनके अनुक्रम को निर्धारित करते हैं: हमलों के बीच दिन इंतजार करना होगा , वे प्रत्येक हमले (नकारात्मक = पश्चिम, सकारात्मक) के लिए अपनी हमले की सीमा इकाइयों को स्थानांतरित करेंगे = पूर्व), हालांकि सीमा का आकार समान रहेगा, और प्रत्येक हमले के बाद उनकी ताकत में निरंतर मूल्य में वृद्धि / कमी होगी।δ डी δ एक्स δ एस δ डी ≥ 1 δ एक्स
समस्या का लक्ष्य हमलावर जनजातियों का संपूर्ण विवरण दिया गया है, यह निर्धारित करना कि उनके कितने हमले सफल होंगे।
मैं एक समाधान को हल करने में कामयाब रहा जो काम करता है, लगभग 20 सेकंड में चल रहा है: मेरा मानना है कि मैंने जो समाधान लागू किया है वह समय है, जहां हमलों की कुल संख्या एक अनुकार (अधिकतम ), और अटैक रेंज (अधिकतम ) पर अद्वितीय बढ़त बिंदुओं की कुल संख्या ।
उच्च स्तर पर, मेरा समाधान:
- सभी जनजाति जानकारी में पढ़ता है
- आक्रमण रेंज के लिए सभी अद्वितीय निर्देशांक की गणना करता है -
- दीवार का प्रतिनिधित्व करता है रेंज पर एक आलसी-अपडेट बाइनरी ट्री के रूप में जो न्यूनतम ऊंचाई मानों को ट्रैक करता है। एक पत्ता दो बीच का अंतर है, जिसमें कुछ भी नहीं है, और सभी मूल नोड्स अपने बच्चों द्वारा कवर किए गए निरंतर अंतराल का प्रतिनिधित्व करते हैं। -
- हर जनजाति के सभी हमलों को उत्पन्न करेगा, और उन्हें दिन के अनुसार क्रमबद्ध करेगा -
- प्रत्येक हमले के लिए, देखें कि क्या यह सफल होगा ( क्वेरी समय)। जब दिन बदलता है, सभी अनप्रोसेस्ड सफल हमलों के माध्यम से लूप करें और तदनुसार दीवार को अपडेट करें ( प्रत्येक हमले के लिए अपडेट का समय)। -
मेरा प्रश्न यह है: क्या से बेहतर करने का कोई तरीका है ? शायद, जनजातियों के क्रमिक हमलों के रैखिक प्रकृति का लाभ उठाने के लिए कुछ रणनीतिक तरीका है? 20 सेकंड एक इच्छित समाधान के लिए बहुत लंबा लगता है (हालांकि जावा को इसके लिए दोषी ठहराया जा सकता है)।