AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
cin>>s;
int cnt1=0,cnt2=0;
for(int i=0;i<s.size();i++){
if(s[i]=='o') cnt1++;
else if(s[i]=='x') cnt2++;
}
if(cnt1&&!cnt2) puts("Yes");
else puts("No");
return 0;
}
数据比较小,可以直接暴力模拟,将c作为中转站,将转换的结果放入c中,再将c的结果放回a中
只需要转换4次就能变回原来的矩阵
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=110;
int a[N][N],b[N][N],c[N][N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>b[i][j];
int x=4;
while(x--){
bool flag=true;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==1)
if(b[i][j]==0) {
flag=false;
break;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
c[i][j]=a[n+1-j][i];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=c[i][j];
}
}
if(flag){
puts("Yes");
return 0;
}
}
puts("No");
return 0;
}
由1到n个箱子以及无限数量的空白卡(用来写数字)
有q次询问
三种操作:
1.把数字i放到箱子j中
2.将箱子i中的数字全部按升序输出(不去重)
3.将含有数字i的箱子中的数字全部按升序输出(去重)
想到用容器,不去重用vector,去重用set
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<set>
using namespace std;
const int N=2e5+10;
vector<int>e[N];
set<int>g[N];
int main()
{
int n,q;
cin>>n>>q;
while(q--){
int num;
cin>>num;
if(num==1){
int x,y;
cin>>x>>y;//x为卡片,y为箱子
e[y].push_back(x);//把卡片放进箱子
g[x].insert(y);//含有数字x的箱子为y
}
else if(num==2){
int m;
cin>>m;//输出箱子m中的数字(升序),重复的也输出
sort(e[m].begin(),e[m].end());
for(auto v:e[m]) cout<<v<<" ";
cout<<endl;
}
else{
int m;//输出含有数字m的箱子(升序),去重
cin>>m;
for(auto v:g[m]) cout<<v<<" ";
cout<<endl;
}
}
return 0;
}
数字位数太多,数字太大,可以用队列存储,这样可以容易获得队头
注意模运算
用队列存下所有的数据
而答案res一直取模是没问题的,途中取模和最后取模结果是一样的
操作1:用取十进制数的方法*10+x
操作2:用res减去第一位数乘以它的位数,可以提前递推得到10的某次方%mod
操作3:输出res,加mod是因为操作2有减法,可能得到负数
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define int long long
using namespace std;
const int N=6e5+10,mod=998244353;
queue<int>heap;
int f[N];
signed main()
{
int res=1;
heap.push(1);
int q;
cin>>q;
f[1]=1;
for(int i=2;i<N;i++) f[i]=f[i-1]*10%mod;
while(q--){
int num;
cin>>num;
if(num==1){
int x;
cin>>x;
heap.push(x);
res=(res*10+x)%mod;
}
else if(num==2){
int x=heap.front();
int cnt=heap.size();
res=(res-x*f[cnt]+mod)%mod;
heap.pop();
}
else{
cout<<(res+mod)%mod<<endl;
}
}
return 0;
}