Rompecabezas de Lezi al horno (matemáticas)
Inserte la descripción de la imagen aquí
Esta pregunta solo necesita ser juzgada, el múltiplo es el número de 2 y el múltiplo es el número de 4. Dos múltiplos de dos pueden llevar dos números y un múltiplo de 在这里插入代码片
cuatro puede llevar dos números.
#include<bits/stdc++.h>
#define maxn 15000
using namespace std;
int ans1,ans2,ans3;
int T,n,a[maxn];
int main()
{
cin>>T;
while(T--)
{
cin>>n;
ans1=ans2=ans3=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]%4==0)ans2++;
else if(a[i]%2==0)ans1++;
else ans3++;
}
if((ans1/2+ans2*2>=n-1)||(ans2-ans3>=0)||(ans3==ans2+1&&!ans1))cout<<"AWaDa!"<<endl;
else cout<<"AKTang!"<<endl;
}
return 0;
}
Secuencia de Akka (simulación)
#include<bits/stdc++.h>
#define maxn 150000
using namespace std;
int a[maxn],n,m,tep;
int main()
{
cin>>n;tep=n;
for(int i=1;i<=n;i++)cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++)
{
int x;cin>>x;
if(x==1)
{
int k;cin>>k;
int j=a[1];
for(int i=2;i<=tep+1;i++)//前面
{
int q=a[i];
a[i]=j;
j=q;
}
tep++;
a[1]=k;
}
else if(x==2)后面
{
int k;cin>>k;
a[++tep]=k;
}
else for(int i=1;i<=tep/2;i++)swap(a[i],a[tep-i+1]);turn
}
for(int i=1;i<=tep;i++)cout<<a[i]<<' ';
return 0;
}
Roast Lezi Fighting Tigers (enumeración + discusión de clasificación)
Primero procese los datos, calcule la distancia entre cada tigre y el primer tigre, y luego enumere el punto de partida, y discuta la izquierda o la derecha en dos categorías. Se encuentra que el valor de ataque agregado por el tigre = el punto de partida del tigre anterior Distancia, por lo que golpear a este tigre es la distancia de dos puntos.
#include<bits/stdc++.h>
#define maxn 150
using namespace std;
int dp[maxn][maxn];
int n,ans,a[maxn],dis[maxn],k=1e6;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],ans+=a[i];
dis[1]=0;
for(int i=1;i<n;i++)cin>>a[i],dis[i+1]+=a[i]+dis[i];
for(int i=1;i<=n;i++)
{
int neww=0;
for(int j=i-1;j>=1;j--)neww+=dis[i]-dis[j];//往左先
for(int j=i+1;j<=n;j++)neww+=dis[i]+dis[j];
k=min(k,neww);
neww=0;
for(int j=i+1;j<=n;j++)neww+=dis[j]-dis[i];//往右先
for(int j=i-1;j>=1;j--)neww+=2*dis[n]-dis[i]-dis[j];
k=min(k,neww);
}
cout<<ans+k;
return 0;
}
Asar y cantar
La persona que inició el dfs violento, el individuo bajo dfs, el número de planes cada vez ++
#include<bits/stdc++.h>
#define maxn 150000
#define mo 998244353
using namespace std;
int a[maxn],tot,head[maxn],vis[maxn];
map<int,int>q[maxn];
int n,m,ans;
struct node
{
int next;
int to;
}edge[maxn];
void add(int u,int v)
{
++tot;
edge[tot].next=head[u];
edge[tot].to=v;
head[u]=tot;
}
void dfs(int x,int tep)
{
ans++;ans%=mo;//方案数加加
for(int i=head[x];i;i=edge[i].next)dfs(edge[i].to,tep+1);//下个人
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;cin>>x>>y;
if(!q[x][y])
{
q[x][y]=1;
add(x,y);
}
}
for(int i=1;i<=n;i++)dfs(i,1);
cout<<ans;
return 0;
}