1.卖菜
第一项和最后一项特殊处理一下即可
#include<iostream>
using namespace std;
int main(){
int n;
int a[1010];
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int b[1010];
for(int i=2;i<=n-1;i++){
b[i]=(a[i-1]+a[i]+a[i+1])/3;
}
b[1]=(a[1]+a[2])/2;
b[n]=(a[n]+a[n-1])/2;
for(int i=1;i<=n;i++)
cout<<b[i]<<" ";
}
2.买菜
用一个数组tm[i]来记录时刻i是否有人
#include<iostream>
#include<cstring>
using namespace std;
#define N 2010
int a[N][2],b[N][2];
int ans=0;
int tm[10000010];
int main(){
int n;
memset(tm,0,sizeof(tm));
cin>>n;
int s,e;
for(int i=0;i<n;i++){
cin>>s>>e;
for(int j=s;j!=e;j++)
tm[j]=1;
}
for(int i=0;i<n;i++){
cin>>s>>e;
for(int j=s;j!=e;j++)
ans+=tm[j];
}
cout<<ans;
}
3.元素选择器
写了很久,读题时候就觉得挺麻烦,交了几次都是WA,最后看了样例点才改出来,心态有点小崩,还有什么办法,对我来说,没有时间去学习那些算法,又想拿高分,那只能不断地去练习模拟题,再恶心也要强忍着练习,加油吧!
题目分析: 虽然题目是树形结构,但是树形结构匹配起来真的麻烦,因此用vector来模拟,变成了寻找子序列问题(y总的想法),代码反而还少了不少!
#include<iostream>
#include<sstream>
#include<vector>
using namespace std;
string lower(const string &s){
string res="";
for(int i=0;i<s.length();i++)
if(s[i]>='A'&&s[i]<='Z') res+=s[i]-'A'+'a';
else res+=s[i];
return res;
}
struct node{
string name,id;
bool is_same(string &s){
if(s[0]=='#') return id==s.substr(1);
return name==lower(s);
}
};
bool cmp(vector<node> &vec,vector<string>& s){
int i=0,j=0;
if(!vec.back().is_same(s.back())) return false;
while(i<vec.size()-1&&j<s.size()-1){
if(vec[i].is_same(s[j])) j++;
i++;
}
return j==s.size()-1;
}
vector<vector<node> >vs;
vector<node> temp;
int main(){
int n,m;
cin>>n>>m;
getchar();
string line;
node nd;
while(n--){
getline(cin,line);
int i=0;
while(i<line.length()&&line[i]=='.') i++;
int deep=i/2;
while(deep<temp.size()){
temp.pop_back();
}
int j=i;
while(i<line.length()&&line[i]!=' ') i++;
nd.name=lower(line.substr(j,i-j));
if(i!=line.length()){
nd.id=line.substr(i+2);
}
temp.push_back(nd);
vs.push_back(temp);
nd.name=nd.id="";
}
while(m--){
getline(cin,line);
vector<string> sel;
stringstream ss(line);
string s;
while(ss>>s) sel.push_back(s);
vector<int> res;
for(int i=0;i<vs.size();i++){
if(cmp(vs[i],sel)){
res.push_back(i+1);
}
}
cout<<res.size()<<" ";
for(int i=0;i<res.size();i++)
cout<<res[i]<<" ";
cout<<endl;
}
}
4.再卖菜
差分约束,还没有学过(留个坑,日后来填)

129

被折叠的 条评论
为什么被折叠?



