1.铺地毯
这道题一直WA?,最后看了题解终于过了
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MA=10005;
int n;
int a[MA][4];
int main()
{
memset(a,0,sizeof(a));
cin>>n;
for(int i=0;i<n;++i){
cin>>a[i][0]>>a[i][1]>>a[i][2]>>a[i][3];//a,b,g,k;
a[i][3]+=a[i][1];
a[i][2]+=a[i][0];
}
int x,y;
cin>>x>>y;
for(int i=n-1;i>=0;--i){
if(a[i][0]<=x&&a[i][2]>=x&&a[i][1]<=y&&a[i][3]>y){
cout<<i+1<<endl;
return 0;
}
}
cout<<"-1"<<endl;
return 0;
}
2.
好烦的一道题,要考虑很多问题,看完下面dalao的代码,感觉自己做题思路很乱,应该先仔细思考这道题,如何处理各个问题,而不是直接上手写;?
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MA=10005;
int a[MA],b[MA];
int n;
int main()
{
ios_base::sync_with_stdio();
cin>>n;
int t=0,s=0,e=n;
for(int i=0;i<=n;++i){
cin>>a[i];
if(!t&&a[i]){
s=i;
t=1;
}
if(n-i==0){
e=i;
}
if(a[i]==1)b[i]=1;
else if(a[i]==-1)b[i]=2;
else if(a[i]>0)b[i]=3;
else if(a[i]<0)b[i]=4;
else b[i]=0;
}
for(int i=s;i<=n;++i){
if(i==e){
if(a[i]>0)printf("+%d",a[i]);
else if(a[i]<0)printf("%d",a[i]);
break;
}
switch(b[i])
{
case 1:{
if(i==s&&n-i==1)printf("x");
else if(n-i==1)printf("+x");
else if(i==s)printf("x^%d",n-i);
else printf("+x^%d",n-i);
}break;
case 2:{
if(n-i!=1)printf("-x^%d",n-i);
else printf("-x");
}break;
case 3:{
if(i==s&&n-i==1)printf("%dx",a[i]);
else if(n-i==1)printf("+%dx",a[i]);
else if(i==s)printf("%dx^%d",a[i],n-i);
else printf("+%dx^%d",a[i],n-i);
}break;
case 4:{
if(n-i==1)printf("%dx",a[i]);
else printf("%dx^%d",a[i],n-i);
}break;
default:break;
}
}
cout<<endl;
return 0;
}
看到了大佬的代码,Orz
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a;
cin>>n;
for(int i=n;i>=0;i--){
cin>>a;
if(a){ 判0系数
if(i!=n&&a>0)cout<<"+"; 根据正负、是否为最高此项决定加号
if(abs(a)>1||i==0)cout<<a; 输出系数(系数不为正负1或指数为0)
if(a==-1&&i)cout<<"-"; -1系数特判,常数项已特判
if(i>1)cout<<"x^"<<i; 二次及以上输出指数
if(i==1)cout<<"x"; 一次项
}
}
}
3.机器翻译
读题时读到 “ 软件会清空最早进入内存的那个单词 ” 就觉得可以用队列。
#include<iostream>
#include <algorithm>
#include <queue>
using namespace std;
const int MA=10005;
bool vis[MA];
int main()
{
ios_base::sync_with_stdio();
int M,N,a,sum=0;
cin>>M>>N;
queue<int> q;
for(int i=0;i<N;++i){
cin>>a;
if(!vis[a]){
q.push(a);
vis[a]=true;
sum++;
if(q.size() > M) {
vis[q.front()]=false;
q.pop();
}
}
}
cout<<sum<<endl;
return 0;
}