QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#391657#3791. Interesting Calculatorwanyurukong0 0ms0kbC++171.8kb2024-04-16 17:57:502024-04-16 17:57:51

Judging History

你现在查看的是最新测评结果

  • [2024-04-16 17:57:51]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:0kb
  • [2024-04-16 17:57:50]
  • 提交

answer

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<math.h>
#include<set>
#include<bitset>
#include<deque>
#include<unordered_map>
#include<algorithm>
#define int long long
using namespace std;
typedef pair<int,int>PII;
const int N=1e5+10,M=5e2+10;
int w[35];
int dp[N],res[N],dpp[N],re[N];

signed main(){
	ios::sync_with_stdio(false);
	cin.tie();
	cout.tie();
	int n,m;
	int oo=0;
	while(cin>>n>>m){
		for(int i=1;i<=30;i++){
			cin>>w[i];
		}
		for(int i=n;i<=m;i++){
			dp[i]=0x3f3f3f3f3f3f3f3f;
			res[i]=0x3f3f3f3f3f3f3f3f;
			re[i]=0x3f3f3f3f3f3f3f3f;
			dpp[i]=0x3f3f3f3f3f3f3f3f;
		}
		dp[n]=0;
		res[n]=0;
		for(int i=n;i<=m;i++){
			for(int j=1;j<=30;j++){
				int num=i;
				if(j<=10){
					num*=10;
					num+=((j-1)%10);
				}
				else if(j>20){
					num*=((j-1)%10);
				}
				else num+=((j-1)%10);
				if(dp[i]+w[j]<=dp[num]){
					if(dp[i]+w[j]==dp[num]) res[num]=min(res[num],res[i]+1);
					else res[num]=res[i]+1;
					dp[num]=min(dp[num],dp[i]+w[j]);
//					if(num==128) cout<<res[128]<<" "<<i<<" "<<j<<"!!!\n";
				}
			}
//			cout<<res[m]<<"!!!\n";
		}
		for(int i=0;i<=m;i++){
			for(int j=1;j<=30;j++){
				int num=i;
				if(j<=10){
					num*=10;
					num+=((j-1)%10);
				}
				else if(j>20){
					num*=((j-1)%10);
				}
				else num+=((j-1)%10);
				if(dpp[i]+w[j]<=dpp[num]){
					if(dpp[i]+w[j]==dpp[num]) re[num]=min(re[num],re[i]+1);
					else re[num]=re[i]+1;
					dpp[num]=min(dpp[num],dpp[i]+w[j]);
//					if(num==128) cout<<res[128]<<" "<<i<<" "<<j<<"!!!\n";
				}
			}
//			cout<<res[m]<<"!!!\n";
		}
		if(dpp[m]<dp[m]){
			cout<<"Case "<<++oo<<": "<<dpp[m]<<" "<<re[m]+1<<endl;
		}
		else if(dpp[m]==dp[m]){
			int mi=min(re[m]+1,res[m]);
			cout<<"Case "<<++oo<<": "<<dp[m]<<" "<<mi<<endl;
		}
		else cout<<"Case "<<++oo<<": "<<dp[m]<<" "<<res[m]<<endl;
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Runtime Error

input:

12 256
100 100 100 1 100 100 100 100 100 100
6 5 4 3 2 1 2 3 4 5
100 100 10 100 100 100 100 100 100 100
12 256
100 100 100 1 100 100 100 100 100 100
100 100 100 100 100 1 100 100 100 100
100 100 10 100 100 100 100 100 100 100
1 100000
100000 100000 100000 100000 100000 100000 100000 100000 100000 10...

output:

Case 1: 7 6
Case 2: 12 3

result: