Campamento de verano 1 Sesión 10

Rompecabezas de Lezi al horno (matemáticas)

Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquíInserte la descripción de la imagen aquí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)

Inserte la descripción de la imagen aquí

#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)

Inserte la descripción de la imagen aquí
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 cantarInserte la descripción de la imagen aquí

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;
}

Supongo que te gusta

Origin blog.csdn.net/yhhy666/article/details/108255595
Recomendado
Clasificación