0
点赞
收藏
分享

微信扫一扫

✪模拟✪

云朵里的佛光 2022-03-30 阅读 38

模拟就是,题目让做什么,就做什么

 

本篇收录模拟问题

3D模型

#include<iostream>
#include<string>
using namespace std;

int n,m;	//长,宽 
int city[1005][1005];
int S;
char c;

int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			cin>>c;
			city[i][j]=c-'0';	//这个挺重要滴,char转int 
			if(city[i][j]!=0) S+=2;	//只要这个位置有方块,上下表面积各+1 
		}
	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			if(city[i][j]>city[i-1][j])
				S+=city[i][j]-city[i-1][j];//比ta上边高,必定会多贡献高的那些面面积
				
			if(city[i][j]>city[i+1][j]) 	//比下面高的贡献 
				S+=city[i][j]-city[i+1][j];
				
			if(city[i][j]>city[i][j-1]) 	//比左面 
				S+=city[i][j]-city[i][j-1];
				
			if(city[i][j]>city[i][j+1]) 	//右面 
				S+=city[i][j]-city[i][j+1];
		}
		
	cout<<S; 
}

到天宫做客

#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
using namespace std;

int n;
int m[370];	//必须待在人间的月,日 
int d[370];
int x[13]={0,31,60,91,121,152,182,213,244,274,305,335,366};
//建立一个日期部分和,这样就可以直接算出两个日期的间隔天数 
int s[370];

int main(){
	cin>>n;//必须在人间待的天数
	for(int i=1;i<=n;i++){
		cin>>m[i]>>d[i];
	} 
	for (int i=1;i<=n-1;i++)
    for (int j=i+1;j<=n;j++) 
 	if (m[j]<m[i]||m[j]==m[i]&&d[j]<d[i])
    //月数大或月数相同而日期大就交换 
    {
        swap(m[j],m[i]);
        swap(d[j],d[i]);
    } 
    
    s[1]=0;	
	 //第一天得从1月1日算起,记得不能把这一天算进去 
    for (int i=2;i<=n;i++)
    {
        s[i]= x[m[i]-1] + d[i] - (x[m[i-1]-1]  + d[i-1])- 1;
        //算出这一天和前一天间隔的天数 
    }
	sort(s+1,s+1+n+1);//将算出的间隔排序 
    cout<<round((s[n+1]*1.0)/366*86400);
	
}

营养膳食

#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
using namespace std;

int n,m,k;		//最多吃m份,有n种食品,分为k类
int maxeat[105];//第i种食物能吃的最大数量就是maxeat[b[i]] 
struct fanfan{
	int a;	//脂肪数 
	int b;	//所属类别
}s[205];

int sum;

//贪心,这个函数专门为饭饭们根据脂肪值排序
bool cmp(fanfan i,fanfan j){
	return i.a>j.a;
} 

int main(){
	cin>>n>>m>>k;
	
	for(int i=1;i<=k;i++)
		cin>>maxeat[i];
		
	for(int i=1;i<=n;i++)
    	cin>>s[i].a>>s[i].b;
    	
    sort(s+1,s+1 +n,cmp);
    int i=1;
  	while(m>0 && i<=n){
  		if(maxeat[s[i].b]>0){
  			sum+=s[i].a;
  			m--;
  			maxeat[s[i].b]--;
		  }
		  i++;
	  }
	  cout<<sum;
}

攻击火星  

 

魔法照片 

这题。。复习一下排序的写法可以

#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
using namespace std;

int n,k;
struct man{
	int w;	//权值,要按这个排序 
	int d;	//序号
	int c;	//类别序号
	int num; //编号 

}people[20005];

int e[11];

bool cmp(const man &i,const man &j){
	if(i.w!=j.w)return i.w>j.w;
	return i.num<j.num;
}

int main(){
	cin>>n>>k;
	for(int i=1;i<=10;i++)
		cin>>e[i];
	for(int i=1;i<=n;i++){
		cin>>people[i].w;
		people[i].num=i;
	}
	

	sort(people+1,people+1+n,cmp);

	
	for(int i=1;i<=n;i++){
		people[i].d=i;
		people[i].c=(people[i].d-1)%10+1;
		people[i].w+=e[people[i].c];
	}
	
	sort(people+1,people+1+n,cmp);
	for(int i=1;i<=k;i++)
	cout<<people[i].num<<" ";

	
}
举报

相关推荐

0 条评论