HGOI 20181028 题解

本文详细解析了HGOI20181028复赛中的三道算法题目,包括暴力求解、二分图01染色法和BFS套BFS算法实现。提供了完整的代码示例和问题解决思路。

HGOI 20181028(复赛备考)

/*
真是暴力的一天,最后一题MLE?由于数组开得太大了!!!
270滚粗
考场上好像智商高了很多?!(假的)
*/

sol:暴力求解,然后没有数据范围吐槽一下(我开了10000000)

code:(100pts)

# include <bits/stdc++.h>
using namespace std;
const int MAXN=1e7+10;
char s[MAXN];
int fun(char c)
{
    if (c=='W') return 64;if (c=='H') return 32;if (c=='Q') return 16;
    if (c=='E') return 8; if (c=='S') return 4; if (c=='T') return 2;
    if (c=='X') return 1;
}
bool check(int l,int r)
{
    int ret=0;
    for (int i=l;i<=r;i++) ret+=fun(s[i]);
    if (ret==64) return true;
    else return false;
}
int main()
{
    freopen("jingle.in","r",stdin);
    freopen("jingle.out","w",stdout);
    cin>>s; int len=strlen(s);
    int cnt=0; for (int i=0;i<len;i++) if (s[i]=='/') cnt++;
    cnt--;
    int l=1,r,now=1;
    int ans=0;
    while(true) {
        for (r=l+1;r<=len;r++) if (s[r]=='/') break; r--;
        if (check(l,r)) ans++;
        l=r+2;
        if (now==cnt) break;
        now++;
    }
    printf("%d\n",ans);
    return 0;
}

 

 

其实看一下就可以发现奇环显然是不行的。偶环一定可以通过0和1求解,然后就想到二分图

显然,如果这是张二分图那么就Yes采取01染色法求解(dfs暴力O(n)),如果不能做到01染色那么就输出No

但是注意图并不一定是连通图所以要多遍dfs

code(100pts)——第一次在考场上写read和write很激动然后封装了Input Output Base System的struct!码风很奇怪。。。

# include <bits/stdc++.h>
# define Rint register int
using namespace std;
const int MAXN=10005,MAXM=2*100005;
int head[MAXN],col[MAXN],tot=0,n,m;
bool vis[MAXN],ff;
struct rec{ int pre,to;}a[MAXM];
struct IOBS{
    inline int read()
    {
        int X=0,w=0; char c=0;
        while (!(c>='0'&&c<='9')) { w|=c=='-';c=getchar();}
        while (c>='0'&&c<='9') { X=(X<<3)+(X<<1)+(c^48); c=getchar();}
        return w?-X:X;
    }
    inline void write(Rint x)
    {
        if (x<0) { x=-x; putchar('-');}
        if (x>9) write(x/10);
        putchar(x%10+'0');
    }
    inline void write_files(Rint x,char cc){ write(x); putchar(cc);}
    inline void Files()    { freopen("perfect.in","r",stdin); freopen("perfect.out","w",stdout);}
}IO;
inline void adde(Rint u,Rint v)
{
    a[++tot].pre=head[u];
    a[tot].to=v;
    head[u]=tot;
}
inline void dfs(Rint u,Rint c)
{
    vis[u]=true; col[u]=c;
    for (Rint i=head[u];i;i=a[i].pre){
        int v=a[i].to; 
        if (vis[v]&&col[v]!=(!c)) { ff=false; return;}
        if (vis[v]&&col[v]==(!c)) continue;
        dfs(v,!c);
    }
}
int main()
{
    IO.Files(); n=IO.read(); m=IO.read();
    int u,v; 
    for (Rint i=1;i<=m;i++) {
        u=IO.read();v=IO.read();
        adde(u,v); adde(v,u);
    }
    memset(vis,false,sizeof(vis));
    for (Rint i=1;i<=n;i++) {
        if (vis[i]) continue;
        ff=true; dfs(i,0);
        if (ff==false) { printf("NO\n"); return 0;}
    }
    putchar('Y');putchar('E');putchar('S');putchar('\n');
    for (Rint i=1;i<=n;i++) 
    if (i!=n) IO.write_files(col[i],' ');
    else IO.write(col[i]);
    putchar('\n');
    return 0;
}

 

 

 

sol: 通过n,m<=5发现是暴力题然后算了下裸bfs暴力会TLE但是还是打了23333!

我可是码过斗地主、德州扑克的人!其实这点码量差不多就是100行左右吧

不大不大 bfs套bfs! (注意Mle!)

# include <bits/stdc++.h>
# define Rint register int
using namespace std;
const int MAXN=7;
const int dx[]={0,-1,0,1,0};
const int dy[]={0,0,1,0,-1};
struct node{ int M[MAXN][MAXN],L,scr;};
struct rec{ int x,y,step;};
char s[MAXN];
int mp[MAXN][MAXN],start[MAXN][MAXN],n,m;
bool inq[MAXN][MAXN];
queue<rec>Q;  
inline bool check(Rint X1,Rint Y1,Rint X2,Rint Y2,int &d)
{
    while(!Q.empty()) Q.pop(); 
    memset(inq,false,sizeof(inq));
    inq[X1][Y1]=true; rec st; st.step=0; st.x=X1; st.y=Y1;
    Q.push(st);
    while (!Q.empty()) {
        rec u=Q.front();Q.pop(); 
        for (int i=1;i<=4;i++) {
            rec v;
            v.x=u.x+dx[i]; v.y=u.y+dy[i]; v.step=u.step+1;
            if (v.x==X2&&v.y==Y2) { d=v.step-1;  return true;}
            if (v.x>n||v.x<1|v.y>m||v.y<1||inq[v.x][v.y]||mp[v.x][v.y]!=10) continue;
            if (v.x==X2&&v.y==Y2) { d=v.step-1;  return true;}
            Q.push(v); inq[v.x][v.y]=true;
        }
    }
    return false;
}
queue<node>q;
inline void bfs()
{
    node st; memcpy(st.M,start,sizeof(start));
    st.L=0; st.scr=0;
    int ans_scr=0,ans_L=0x7f7f7f7f;
    q.push(st);
    while (!q.empty()) {
        node u=q.front();q.pop();
        for (Rint X1=1;X1<=n;X1++)
        for (Rint Y1=1;Y1<=m;Y1++) {
          if (u.M[X1][Y1]==-1||u.M[X1][Y1]==10) continue;
             for (Rint X2=1;X2<=n;X2++)
             for (Rint Y2=1;Y2<=m;Y2++) {
                  if (X1==X2&&Y1==Y2) continue;
                  if (u.M[X2][Y2]==-1||u.M[X2][Y2]==10) continue;
                  if (u.M[X1][Y1]!=u.M[X2][Y2]) continue;
                  int delt_L; memcpy(mp,u.M,sizeof(u.M));
                  if (check(X1,Y1,X2,Y2,delt_L)) {
                      node v=u; memcpy(v.M,u.M,sizeof(u.M));
                      v.L=u.L+delt_L; v.scr=u.scr+1;
                      v.M[X1][Y1]=v.M[X2][Y2]=10;
                      if (v.scr>ans_scr) { ans_scr=v.scr; ans_L=v.L; }
                      else if (v.scr==ans_scr&&v.L<ans_L) ans_L=v.L; 
                      q.push(v);
                  }
              }
         }
    }
    if (ans_scr==0) printf("0 0\n"); 
    else printf("%d %d\n",ans_scr,ans_L);
}
int main()
{
    scanf("%d%d",&n,&m);
    for (Rint i=1;i<=n;i++) {
        cin>>s;
        for (Rint j=0;j<m;j++)
        if (s[j]>='0'&&s[j]<='9') start[i][j+1]=s[j]-'0';
        else if (s[j]=='X') start[i][j+1]=-1;
    }
    bfs();
    return 0;
}

 

转载于:https://www.cnblogs.com/ljc20020730/p/9865404.html

内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完了启动、进水器件选型,软件、正反转洗涤部分完I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值