模拟就是,题目让做什么,就做什么
?
本篇收录模拟问题
3D模型
每个方块如果比相邻某个方向的高x,那它一定贡献了x的表面积,而且这样算也不会重复,在边缘处,因为开了一个值为0的大数组,所以就是贡献比0大的表面积,所以边上也不会丢掉~~~~?
#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;
}
这道题和上一题都涉及到了一个,有a[],b[],一一对应,要给a排序,因为他们是对应的,所以b也得跟着动——自己写cmp函数,放在sort里,既然饭有两种属性,干脆写成结构体,就可以把饭根据脂肪量排序,同时b对应关系也不会乱
攻击火星??
?
魔法照片?
这题。。复习一下排序的写法可以
#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<<" ";
}
|