#include<stdio.h> typedef struct product{ int price; int sale; }Product; int main(void){ int expect; int price, sale; int ogPrice, ogSale, maxPrice=0; Product p[10050]; for(int i=0; i<10050; i++){ p[i].sale = 0; p[i].price = 0; } scanf("%d", &expect); scanf("%d%d", &price, &sale); maxPrice = ogPrice = price; ogSale = sale; p[ogPrice].price = price; p[ogPrice].sale = sale; while(1){ scanf("%d%d", &price, &sale); if(price==-1 && sale==-1) break; p[price].price = price; p[price].sale = sale; if(price > maxPrice) maxPrice = price; } int dec; Product be, af;//前驱后继 scanf("%d", &dec); for(int i=ogPrice; i<10050; i++){ if(p[i].price == 0){ p[i].price = i; if(p[i].price > maxPrice) p[i].sale = p[i-1].sale - dec; else{ for(int j=i-1; j>=ogPrice; j--){ if(p[j].price != 0)//说明被赋过值 be = p[j]; break; } for(int j=i+1; j<10050; j++){ if(p[j].price != 0){ af = p[j]; break; } } p[i].sale = be.sale+((af.sale - be.sale)/(af.price - be.price)); } } if(p[i].sale <= 0) break; } int maxId = -1; int maxProfit = -1; int profit; int add = 0, minus = 0; while(maxId != expect && add < 10000){ maxId = -1; maxProfit = -1; for(int i=ogPrice; i<10050; i++){ if(p[i].sale <= 0) break; profit = (p[i].price-p[ogPrice].price+add)*p[i].sale; if(profit >= maxProfit){ maxId = i; maxProfit = profit; } } add++; } if(maxId == expect) add--; else add = 100000; maxId = -1; maxProfit = -1; while(maxId != expect && minus*(-1) < 10000){ maxId = -1; maxProfit = -1; for(int i=ogPrice; i<10050; i++){ if(p[i].sale <= 0) break; profit = (p[i].price-p[ogPrice].price+minus)*p[i].sale; if(profit >= maxProfit){ maxId = i; maxProfit = profit; } } minus--; } if(maxId == expect){ ++minus; } else minus = -100000; if(add == 100000 && minus == -100000) printf("NO SOLUTION"); else if(add < minus*(-1)) printf("%d", add); else printf("%d", minus); return 0; }