开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情
A-子序列的权值最小值
思路:数据给的非常小,直接暴力模拟求最小值就行,也没有什么需要注意的点
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) ((x)&(-x))
#define endl '\n'
using namespace std;
const ll mod=998244353;
int n,a[22];
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;
int ans=inf;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
int sum=a[i];
ans=min(sum,ans);
for(int j=i+1;j<=n;j++)
{
sum&=a[j];
ans=min(sum,ans);
}
}
cout<<ans<<endl;
return 0;
}
B-魔导师晨拥
思路:需要注意的是n是随从的个数不包括敌方英雄,数据范围也很小还是可以直接暴力,循环m轮每次都是从第一个随从开始,如果当前随从的生命值小于等于0那么就跳过,如果当前的生命值恰好等于技能伤害那技能伤害就加一,否则就直接减去伤害,循环完所有随从后答案加上当前的技能伤害表示对敌方英雄造成的伤害,最后输出答案就可以了
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int n,m,a[105];
signed main()
{
//ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
int ans=0,dam=2;
while(m--)
{
for(int i=1;i<=n;i++)
{
if(a[i]<=0) continue;
if(a[i]==dam) dam++;
a[i]-=dam;
}
ans+=dam;
}
cout<<ans<<endl;
return 0;
}
C-GCPC总决赛_
思路:还是数据很小可以直接暴力而且也没说答案需要取模于模数什么的,就可以往暴力这边想一下了(实际上是不大会算搜索的复杂度所以只能靠猜了,,,),用搜索模拟这个过程就行,感觉这个C思路没啥难的可能是实现不好实现吧,竟然过的还没有D多(虽然D现在还没看)
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const ll inf=1e18;
int win,lose,draw,n,a[12],b[12],vis[12];
void dfs(int pos,int rac)
{
if(pos>n)
{
if(rac>0) win++;
else if(rac<0) lose++;
else draw++;
}
for(int i=1;i<=n;i++)
{
if(vis[i]) continue;
int tmp=rac;
if(a[pos]>b[i]) tmp++;
else if(a[pos]<b[i]) tmp--;
vis[i]=1;
dfs(pos+1,tmp);
vis[i]=0;
}
}
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
draw=0,lose=0,win=0;
dfs(1,0);
cout<<win<<" "<<lose<<" "<<draw<<endl;
return 0;
}