贪心相关的总是运行超时,气死了,啊啊啊
PAT1023B 组个最小数 (20 分)
https://pintia.cn/problem-sets/994805260223102976/problems/994805298269634560
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
int num[10]={0};
int cnt[10]={0};
for(int i=0;i<10;i++){
cin>>cnt[i];
num[cnt[i]]++;
}
//输出第一个数字
for(int i=1;i<10;i++){
if(cnt[i]!=0){
cout<<i;
cnt[i]--;
break;
}
}
//输出后面几个数字
for(int i=0;i<10;i++){
while(cnt[i]>0){
cout<<i;
cnt[i]--;
}
}
return 0;
}
PAT1020B 1020 月饼 (25 分)/1070A
https://pintia.cn/problem-sets/994805260223102976/problems/994805301562163200
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1010;
struct Moon{
//库存量
double cnt;
//零售价
double price;
//总售价
double sale;
}cake[maxn];
//比较单价进行排序
bool cmp(Moon a,Moon b){
if(a.price != b.price){
return a.price>b.price;
}
else return a.cnt>b.cnt;
}
int main(){
//n为月饼的种类数,d为市场最大需求
int n,d;
cin>>n>>d;
for(int i=0;i<n;i++){
cin>>cake[i].cnt;
}
for(int i=0;i<n;i++){
cin>>cake[i].sale;
cake[i].price = cake[i].sale/cake[i].cnt;
}
sort(cake,cake+n,cmp);
//出错,检查
/* for(int i=0;i<n;i++){
cout<<cake[i].sale;
}
cout<<endl;
*/
//int key=0;
double key = 0;
for(int i=0;i<n&&d>0;i++){
if(cake[i].cnt <= d){
key = key+cake[i].sale;
}
else
key = key+cake[i].price*d;
d = d-cake[i].cnt;
}
// cout<<key;
printf("%.2f",key);
return 0;
}
PAT1033A To Fill or Not to Fill (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805458722734080
在这里插入代码片
PAT1037A Magic Coupon (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805451374313472
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int arr[100010]={0};
int arr1[100010]={0};
int n,m;
cin>>n;
for(int i=0;i<n;i++){
cin>>arr[i];
}
sort(arr,arr+n,cmp);
cin>>m;
for(int i=0;i<m;i++){
cin>>arr1[i];
}
sort(arr1,arr1+m,cmp);
int sum=0,i=0,j=0;
for(;i<n&&j<m;i++,j++){
if(arr[i]>=0&&arr1[j]>=0){
sum+=arr[i]*arr1[j];
}
}
for(;i>=0&&j>=0;i--,j--){
if(arr[i]<=0&&arr1[j]<=0){
sum+=arr[i]*arr1[j];
}
}
cout<<sum;
return 0;
}
PAT1067A Sort with Swap(0, i) (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805403651522560
未理解
#include <iostream>
using namespace std;
int main() {
int n, t, cnt = 0, a[100010];
cin >> n;
for(int i = 0; i < n; i++){
cin >> t;
a[t] = i;
}
for(int i = 1; i < n; i++) {
while(i != a[i]) {
while(a[0] != 0) {
swap(a[0],a[a[0]]);
cnt++;
}
if(i != a[i]) {
swap(a[0],a[i]);
cnt++;
}
}
}
cout << cnt;
return 0;
}
PAT1038A Recover the Smallest Number (30 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805449625288704
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
bool cmp(string a,string b){
return a+b<b+a;
}
int main(){
string num[10010];
int n;
cin>>n;
string flag;
for(int i=0;i<n;i++){
cin>>num[i];
}
sort(num,num+n,cmp);
string str;
for(int i=0;i<n;i++) str=str+num[i];
while(str[0]=='0'&&str.length()>1){
str.erase(str.begin());
}
cout<<str;
return 0;
}
PAT1030B 完美数列 (25 分)/1085A
https://pintia.cn/problem-sets/994805260223102976/problems/994805291311284224
第四个测试点运行超时,第五个测试点错误
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int n,p,max;
cin>>n>>p;
int arr[100010]={0};
for(int i=0;i<n;i++){
cin>>arr[i];
}
sort(arr,arr+n);
max=arr[n-1];
int maxN=0;
for(int i=0;i<n;i++){
int num=0;
for(int j=i;j<n;j++){
if(arr[j]*p>=max){
num++;
}
}
if(num>maxN) maxN=num;
}
cout<<maxN;
return 0;
}
PAT1010A
整道题感觉乱七八糟的,气死了
在这里插入代码片
PAT1044A Shopping in Mars (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805439202443264
测试点2,5运行超时
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int num[100010]={0};
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>num[i];
}
int left=0,right=0,sum=0,min=0,index=0;
bool flag=false;
for(int i=0;i<n;i++){
sum=num[i];
left=i+1;
if(sum==m){
cout<<left<<"-"<<left<<endl;
flag=true;
}
else{
for(int j=i+1;j<n;j++){
if((sum+num[j])<=m){
sum=sum+num[j];
right=j+1;
}
else if((sum+num[j])>m){
sum=sum+num[j];
right=j+1;
break;
}
if(sum==m){
break;
}
}
if(sum==m){
flag=true;
cout<<left<<"-"<<right<<endl;
}
else if(sum>m){
if(sum<min||(index==0)){
index=1;
min=sum;
}
}
}
}
if(!flag){
for(int i=0;i<n;i++){
sum=num[i];
left=i+1;
if(sum==min){
cout<<left<<"-"<<left<<endl;
}
else{
for(int j=i+1;j<n;j++){
if((sum+num[j])<=min){
sum=sum+num[j];
right=j+1;
}
else if((sum+num[j])>min){
sum=sum+num[j];
right=j+1;
break;
}
if(sum==min){
break;
}
}
if(sum==min){
cout<<left<<"-"<<right<<endl;
}
}
}
}
return 0;
}
PAT1048A Find Coins (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805432256675840
测试点3,4运行超时
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int arr[100010]={0};
int n,m;
cin>>n>>m;
bool flag=false;
for(int i=0;i<n;i++){
cin>>arr[i];
}
sort(arr,arr+n);
int left=0,right=0;
for(int i=0;i<n;i++){
left=arr[i];
for(int j=i+1;j<n;j++){
right=arr[j];
if((left+right)==m){
flag=true;
cout<<left<<" "<<right;
break;
}
else if((left+right)>m){
break;
}
}
if(flag){
break;
}
}
if(flag==false){
cout<<"No Solution";
}
return 0;
}