https://ac.nowcoder.com/acm/contest/11226
法【签到】
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
string a,b; cin>>a>>b;
for(int i=0;i<a.size();i++)
{
int s1=a[i]-'0';
int s2=b[i]-'0';
cout<<(s1+s2)%3;
}
return 0;
}
佛【暴力枚举】
三维暴力。
#include<bits/stdc++.h>
using namespace std;
const int N=510;
int n,m,t;
int a[N][N],b[N];
int main(void)
{
cin>>t;
while(t--)
{
cin>>n>>m;
int cnt[N][N]={
0};
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) cin>>a[i][j],cnt[i][a[i][j]]++;
for(int i=1;i<=m;i++) cin>>b[i];
for(int i=1;i<=m;i++)
{
int sum=0;
for(int j=1;j<=n;j++)
{
bool flag=1;
for(int k=1;k<=i;k++)
{
if(cnt[j][b[k]]==0) flag=0;
if(!flag) break;
}
if(flag) sum++;
}
cout<<sum<<' ';
}
cout<<'\n';
}
return 0;
}
二维的优化。
#include<bits/stdc++.h>
using namespace std;
const int N=510;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n,m; cin>>n>>m;
int cnt[N][N]={
0};
int b[N]={
0},st[N]={
0};
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int x; cin>>x;
cnt[i][x]++;
}
}
for(int i=1;i<=m;i++) cin>>b[i];
int sum=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(cnt[j][b[i]]&&st[j]==0) sum++,st[j]=1;//如果这个颜色有 且为标记
if(cnt[j][b[i]]==0&&st[j]==1) sum--;//这个颜色没有,之前标记过
if(cnt[j][b[i]]==0) st[j]=-1;//这个颜色没有 标记为不可能
}
cout<<sum<<" ";
}
puts("");
}
return 0;
}
圣【思维】
直接看他给的代码,你会发现其实就是求所有数的异或和。
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5*6+10;
int n,m,t;
LL a[N];
int main(void)
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
cin>>t;
while(t--)
{
cin>>n;
LL ans=0;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) ans^=a[i];
cout<<ans<<'\n';
}
return 0;
}