1、打酱油
题目链接:https://sim.csp.thusaac.com/contest/11/problem/0
本题只需推导出所有输出样例都满足的规律式并输出即可。
100代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int n;
cin >> n;
printf("%d\n", n / 50 * (5 + 2) + n % 50 / 30 * (3 + 1) + (n - 50 * (n / 50) - n % 50 / 30 * 30) / 10);
return 0;
}
评测结果:
2、公共钥匙盒
题目链接:https://sim.csp.thusaac.com/contest/11/problem/1
根据自己的暴力法思路写了一波,结果超时了,只有70分。
70分代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[])
{
int N,K;
cin >> N >> K;
int w[1010],s[1010],c[1010];
int time[2010];
for(int i = 1; i <= K; i++){
cin >> w[i] >> s[i] >> c[i];
time[i] = s[i];
}
int a[1010];
for(int i = 1; i <= N; i++){
a[i] = i;
}
int t = K+1;
for(int i = 1; i <= K; i++){
time[t] = s[i]+c[i];
t++;
}
for(int i = 1; i <= 2*K; i++){
int ans1 = 10110;
for(int j = 1; j <= 2*K; j++){
ans1 = min(ans1 , time[j]);
}
for(int j = 1; j <= 2*K; j++){
if(time[j] == ans1 && j > K && j <= 2*K){
int count1 = 0;
for(int u = K+1; u <= 2*K; u++){
if(time[u] == ans1)count1++;
}
if(count1 == 0){
for(int t = 1; t <= N; t++){
if(a[t] == w[j-K]){
a[t] = 0;
time[j] = 10110;
}
}
}
else if(count1 > 0){
for(int x = 1; x <= count1; x++){
int ans2 = 10110;
for(int v = K+1; v <= 2*K; v++){
if(time[v] == ans1)ans2 = min(ans2 , w[v-K]);
}
for(int w = 1; w <= N; w++){
if(a[w] == 0){
a[w] = ans2;
break;
}
}
for(int z = K+1; z <= 2*K; z++){
if(w[z-K] == ans2 && time[z] == ans1){
time[z] = 10110;
w[z-K] = 10110;
break;
}
}
}
}
}
else if(time[j] == ans1 && j <= K){
int count2 = 0;
for(int u = K+1; u <= 2*K; u++){
if(time[u] == ans1)count2++;
}
if(count2 == 0){
for(int t = 1; t <= N; t++){
if(a[t] == w[j]){
a[t] = 0;
time[j] = 10110;
}
}
}
else if(count2 > 0){
for(int x = 1; x <= count2; x++){
int ans2 = 10110;
for(int v = K+1; v <= 2*K; v++){
if(time[v] == ans1)ans2 = min(ans2 , w[v-K]);
}
for(int w = 1; w <= N; w++){
if(a[w] == 0){
a[w] = ans2;
break;
}
}
for(int z = K+1; z <= 2*K; z++){
if(w[z-K] == ans2 && time[z] == ans1){
time[z] = 10110;
w[z-K] = 10110;
break;
}
}
}
}
}
}
}
for(int i = 1; i <= N; i++){
cout << a[i] << " ";
}
cout << endl;
return 0;
}
评测结果: