Problem:
水道料金

松平さんは、普段からエコに気を付けて生活をしています。先月の水道料金が 4280 円となり、いつも目標としている 4000 円を超えてしまったので、今月は節水に努めてきました。先月と比べて水道料金はどのくらい節約できたのでしょうか。

今月の使用水量 w [m3] を入力とし、先月の水道料金である 4280 円と比較して、どのくらい水道料金を節約できたかを出力するプログラムを作成してください。

なお、水道料金は次のように計算されます。

(水道料金) = (基本料金) + (水量による料金)

水量による料金は下表のように使用量に応じて計算されます。

段階

水量

料金

第 1 段階料金

10 [m3] まで

基本料金 1150 円

第 2 段階料金

10 [m3] 超過 20 [m3] まで

1 [m3] あたり 125 円

第 3 段階料金

20 [m3] 超過 30 [m3] まで

1 [m3] あたり 140 円

第 4 段階料金

30 [m3] 超過分

1 [m3] あたり 160 円

例えば、使用水量 40 [m3] の場合は、
基本料金 1150 円(第 1 段階) + 10 [m3] × 125 円(第 2 段階) + 10 [m3] × 140 円(第 3 段階) + 10 [m3] × 160 円(第 4 段階) = 5400 円

となります。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりは -1 ひとつの行で示されます。

各データセットとして、 今月の使用水量を表す整数 w (0 ≤ w ≤ 100) が１行に与えられます。

データセットの数は 200 を超えません。

Output

入力データセットごとに、先月の水道料金との差を1行に出力します。

Sample Input

29
40
0
-1

Output for the Sample Input

620
-1120
3130

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UncheckedIOException;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		SC sc = new SC(System.in);
		while(true) {
			int L=sc.nextInt();
			if(L==-1) {
				break;
			}
			int sum=0;
			if(L<=10) {
				pl(4280-1150);
			}
			else if(L>10 && L<=20){
				sum=1150+125*(L-10);
				pl(4280-sum);
			}
			else if(L>20 && L<=30) {
				sum=2400+140*(L-20);
				pl(4280-sum);
			}
			else {
				sum+=3800+(L-30)*160;
				pl(4280-sum);
			}
		}
	}
	static class SC {
		private BufferedReader reader = null;
		private StringTokenizer tokenizer = null;
		public SC(InputStream in) {
			reader = new BufferedReader(new InputStreamReader(in));
		}
		public String next() {
			if (tokenizer == null || !tokenizer.hasMoreTokens()) {
				try {
					tokenizer = new StringTokenizer(reader.readLine());
				} catch (IOException e) {
					throw new UncheckedIOException(e);
				}
			}
			return tokenizer.nextToken();
		}
		public int nextInt() {
			return Integer.parseInt(next());
		}
		public long nextLong() {
			return Long.parseLong(next());
		}
		public double nextDouble() {
			return Double.parseDouble(next());
		}
		public String nextLine() {
			try {
				return reader.readLine();
			} catch (IOException e) {
				throw new UncheckedIOException(e);
			}
		}
	}
	public static void pl(Object o) {
		System.out.println(o);
	}
	public static void pl() {
		System.out.println();
	}
	public static void p(Object o) {
		System.out.print(o);
	}
	static int root(int a) {

		int ketasu=0;
		int tmp=a;
		while(tmp>0) {
			ketasu++;
			tmp/=10;
		}
		int constant=(ketasu+1)/2;	//よく使うので定数化
		if(ketasu>=1) {
			int[] suuji=new int[constant];
			tmp=a;
			for(int i=0; i<constant; i++) {
				suuji[constant-1-i]=a%100;
				a/=100;
			}
			int ans=0;
			int kai=0;
			int mae=0;
			if(constant<=1) {
				for(int i=10; i>=0; i--) {
					if(suuji[0]>=i*i) {
						return i;
					}
				}
			}
			else {
				for(int i=0; i<constant; i++) {
					mae+=kai*2;
					for(int j=9; j>=0; j--) {
						if((mae*10+j)*j<=suuji[i]) {
							ans=ans*10+j;
							mae*=10;
							kai=j;
							if(i+1<constant) {
								suuji[i+1]+=(suuji[i]-(mae+j)*j)*100;
							}
							break;
						}
					}
				}
			}
			return ans;
		}
		else {
			return 0;
		}
	}
}