1.To 3
原题链接:
http://162.14.124.219/contest/1007/problem/I
记录数组中除3余数的种类和个数,以及数组元素总和除3的余数,最后判断(考虑总余数为1,两个元素余数为2和总余数为2,两个元素余数为1的特殊情况)
查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[1000000],b[1000000];
signed main() {
string s;
cin>>s;
int t=-1;
int sum=0;
for(int i=0;i<s.size();i++)
{
a[i]=s[i]-'0';
sum+=a[i];
if(a[i]%3==0)b[0]++;
else if(a[i]%3==1)b[1]++;
else b[2]++;
}
if(sum%3==0)cout<<0;
else
{
if(sum%3==1&&b[1]&&s.size()>1)cout<<1;
else if(sum%3==1&&b[2]>=2&&s.size()>2)cout<<2;
else if(sum%3==2&&b[2]&&s.size()>1)
cout<<1;
else if(sum%3==2&&b[1]>=2&&s.size()>2)
cout<<2;
else cout<<-1;
}
return 0;
}
2.Bowls and Dishes
原题链接:
http://162.14.124.219/contest/1007/problem/F
用bfs遍历所有情况并记录按时,取ans最大值
查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,ans;
int a[1000][2],b[1000][2],biao[1000000];
int pan()
{
int sum=0;
for(int i=0;i<m;i++)
{
if(biao[a[i][0]]&&biao[a[i][1]])
sum++;
}
return sum;
}
void bfs(int x)
{
if(x>k)
{
ans=max(ans,pan());
return;
}
for(int i=0;i<2;i++)
{
biao[b[x][i]]++;
bfs(x+1);
biao[b[x][i]]--;
}
}
signed main() {
cin>>n>>m;
for(int i=0;i<m;i++)
cin>>a[i][0]>>a[i][1];
cin>>k;
for(int i=0;i<k;i++)
{
cin>>b[i][0]>>b[i][1];
}
bfs(0);
cout<<ans<<endl;
return 0;
}