L2-032 彩虹瓶 - 栈
思路:
- 可以按顺序装瓶时 看看货架上能不能顺序继续装
- 如果不能 将该序号压入栈(放入货架)
- 如果栈内元素个数>m 则输出NO
- 如果成功把所有序号都能装瓶 且栈不满 就是cnt==n+1 (因为最后cnt多加了1)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m,k;
cin>>n>>m>>k;
while(k--)
{
int cnt=1,t=n;
bool f=true;
stack<int>stk;
while(t--)
{
int x;
cin>>x;
if(x==cnt) //当可以装瓶时 看看货架上能不能继续装
{
cnt++;
while(!stk.empty()&&stk.top()==cnt) stk.pop(),cnt++;
continue;
}
stk.push(x);
if(stk.size()>m) f=false;
}
if(f&&cnt==n+1) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
L1-080 乘法口诀数列 - 20 - 双指针
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x,y,n,i=0,j=1,cnt=2;
cin>>x>>y>>n;
int a[1001];
a[0]=x,a[1]=y;
while(cnt<n)
{
int sum=a[i]*a[j];
if(sum<10) a[cnt++]=sum;
else a[cnt++]=sum/10,a[cnt++]=sum%10; //因为数据范围[0,9] 最大9*9=81不过是两位数
i++,j++;
}
for(int i=0;i<n;i++)
{
if(i!=0) cout<<" ";
cout<<a[i];
}
}
L1-078 吉老师的回归 - 15
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
getchar();
while(n--)
{
string s;
getline(cin,s);
if(s.find("qiandao")!=-1||s.find("easy")!=-1) continue;
m--;
if(m==-1)
{
cout<<s;
return 0;
}
}
cout<<"Wo AK le";
}
L1-076 降价提醒机器人 - 10
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
while(n--)
{
double x;
cin>>x;
if(x>=m) continue;
printf("On Sale! %.1f\n",x);
}
}