# Array# Lookup Table# Input/Output

b120 - 函數計算 (Comp)

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取一個整數 x,其範圍在 -300 到 300 之間,並輸出對應的函數 f(x) 的值。函數 f(x) 的定義由題目提供的數值序列決定。

解題思路

由於輸入範圍有限,且題目要求快速計算函數值,最有效的方法是使用查找表(Lookup Table)。程式碼中 fn[601] 是一個預先計算好的函數值陣列。輸入的 x 值會被調整為陣列的索引,然後直接從陣列中讀取對應的函數值並輸出。由於題目輸入範圍是 -300 到 300,因此需要將 x 加上 300 才能作為陣列的有效索引。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <stdio.h>
int fn[601]={-269990,-268190,-266399,-264611,-262835,-261062,-259298,-257534,-255779,-254027,-252287,-250550,-248822,-247094,-245375,-243659,-241955,-240254,-238562,-236870,-235187,-233507,-231839,-230174,-228518,-226862,-225215,-223571,-221939,-220310,-218690,-217070,-215459,-213851,-212255,-210662,-209078,-207494,-205919,-204347,-202787,-201230,-199682,-198134,-196595,-195059,-193535,-192014,-190502,-188990,-187487,-185987,-184499,-183014,-181538,-180062,-178595,-177131,-175679,-174230,-172790,-171350,-169919,-168491,-167075,-165662,-164258,-162854,-161459,-160067,-158687,-157310,-155942,-154574,-153215,-151859,-150515,-149174,-147842,-146510,-145187,-143867,-142559,-141254,-139958,-138662,-137375,-136091,-134819,-133550,-132290,-131030,-129779,-128531,-127295,-126062,-124838,-123614,-122399,-121187,-119987,-118790,-117602,-116414,-115235,-114059,-112895,-111734,-110582,-109430,-108287,-107147,-106019,-104894,-103778,-102662,-101555,-100451,-99359,-98270,-97190,-96110,-95039,-93971,-92915,-91862,-90818,-89774,-88739,-87707,-86687,-85670,-84662,-83654,-82655,-81659,-80675,-79694,-78722,-77750,-76787,-75827,-74879,-73934,-72998,-72062,-71135,-70211,-69299,-68390,-67490,-66590,-65699,-64811,-63935,-63062,-62198,-61334,-60479,-59627,-58787,-57950,-57122,-56294,-55475,-54659,-53855,-53054,-52262,-51470,-50687,-49907,-49139,-48374,-47618,-46862,-46115,-45371,-44639,-43910,-43190,-42470,-41759,-41051,-40355,-39662,-38978,-38294,-37619,-36947,-36287,-35630,-34982,-34334,-33695,-33059,-32435,-31814,-31202,-30590,-29987,-29387,-28799,-28214,-27638,-27062,-26495,-25931,-25379,-24830,-24290,-23750,-23219,-22691,-22175,-21662,-21158,-20654,-20159,-19667,-19187,-18710,-18242,-17774,-17315,-16859,-16415,-15974,-15542,-15110,-14687,-14267,-13859,-13454,-13058,-12662,-12275,-11891,-11519,-11150,-10790,-10430,-10079,-9731,-9395,-9062,-8738,-8414,-8099,-7787,-7487,-7190,-6902,-6614,-6335,-6059,-5795,-5534,-5282,-5030,-4787,-4547,-4319,-4094,-3878,-3662,-3455,-3251,-3059,-2870,-2690,-2510,-2339,-2171,-2015,-1862,-1718,-1574,-1439,-1307,-1187,-1070,-962,-854,-755,-659,-575,-494,-422,-350,-287,-227,-179,-134,-98,-62,-35,-11,-4,1,2,3,1,-1,-1,-3,-2,-1,-3,-8,-13,-15,-14,-13,-15,-20,-25,-27,-26,-25,-27,-32,-37,-39,-38,-37,-39,-44,-49,-51,-50,-49,-51,-56,-61,-63,-62,-61,-63,-68,-73,-75,-74,-73,-75,-80,-85,-87,-86,-85,-87,-92,-97,-99,-98,-97,-99,-104,-109,-111,-110,-109,-111,-116,-121,-123,-122,-121,-123,-128,-133,-135,-134,-133,-135,-140,-145,-147,-146,-145,-147,-152,-157,-159,-158,-157,-159,-164,-169,-171,-170,-169,-171,-176,-181,-183,-182,-181,-183,-188,-193,-195,-194,-193,-195,-200,-205,-207,-206,-205,-207,-212,-217,-219,-218,-217,-219,-224,-229,-231,-230,-229,-231,-236,-241,-243,-242,-241,-243,-248,-253,-255,-254,-253,-255,-260,-265,-267,-266,-265,-267,-272,-277,-279,-278,-277,-279,-284,-289,-291,-290,-289,-291,-296,-301,-303,-302,-301,-303,-308,-313,-315,-314,-313,-315,-320,-325,-327,-326,-325,-327,-332,-337,-339,-338,-337,-339,-344,-349,-351,-350,-349,-351,-356,-361,-363,-362,-361,-363,-368,-373,-375,-374,-373,-375,-380,-385,-387,-386,-385,-387,-392,-397,-399,-398,-397,-399,-404,-409,-411,-410,-409,-411,-416,-421,-423,-422,-421,-423,-428,-433,-435,-434,-433,-435,-440,-445,-447,-446,-445,-447,-452,-457,-459,-458,-457,-459,-464,-469,-471,-470,-469,-471,-476,-481,-483,-482,-481,-483,-488,-493,-495,-494,-493,-495,-500,-505,-507,-506,-505,-507,-512,-517,-519,-518,-517,-519,-524,-529,-531,-530,-529,-531,-536,-541,-543,-542,-541,-543,-548,-553,-555,-554,-553,-555,-560,-565,-567,-566,-565,-567,-572,-577,-579,-578,-577,-579,-584,-589,-591,-590};
int main(){
    int x;
    while(scanf("%d", &x)>0)
    	printf("%d\n", fn[x+300]);
}

Discussion