SRM 550 DIV2

 

 

250pt

题意:

给定两个只有两种字符组成的字符串,把一个字符变成另一个字符称为一次变换,求是否能从第一个字符串经过k次变换后变成第二个字符串。

 

分析:

首先求出至少需要多少次变换m,若k不小于mkm的差是偶数(1个字符通过两次变换后值不变),则能,否则不能. 

View Code
class EasyConversionMachine 
{ 
        public: 
        string isItPossible(string ow, string fw, int k) 
        { 
                int i,j,n=ow.size();
                for(i=j=0;i<n;i++)
                    if(ow[i]!=fw[i])
                        j++;
                if(k>=j&&(k-j)%2==0)
                    return "POSSIBLE";
                return "IMPOSSIBLE";
        } 
        
 
}; 

 

 

500pt

题意:

在一个长宽未知的网格图里,一个机器人开始面朝东方,两个移动规则:

1,它会一直往前走直到碰到墙壁或已经走过的格子,之后会往左转。

2,重复1直到停止。

给定一个机器人的移动步数序列,求面积最小的网格图

 

分析:

因为序列数和步长都小于50,直接模拟,之后再求出已访问过的格点的行和列的最小值和最大值,差即为所求长和宽的值,构造网格图的边界,再验证每步步长是否符合规则1

 

View Code
class RotatingBot 
{ 
        public: 
        int minArea(vector <int> a) 
        {
            bool map[150][150]={false};
            int i,j,k,t,li,lj,ri,rj,v,n=a.size();
            int d[4][2]={{0,1},{-1,0},{0,-1},{1,0}};

            map[60][60]=true;
            for(k=t=0,i=j=60;k<n;k++)
            {
                for(v=0;v<a[k];v++)
                {
                    i+=d[t][0];
                    j+=d[t][1];
                    if(map[i][j])
                        return -1;
                    map[i][j]=true;
                }
                t=(t+1)%4;
            }
            li=lj=111;
            ri=rj=0;
            for(i=0;i<150;i++)
                for(j=0;j<150;j++)
                    if(map[i][j])
                    {
                        if(i<li)
                            li=i;
                        if(i>ri)
                            ri=i;
                        if(j<lj)
                            lj=j;
                        if(j>rj)
                            rj=j;
                    }
            int w=rj-lj+1,h=ri-li+1;

            memset(map,false,sizeof(map));
            map[60][60]=true;
            for(i=li-1,j=lj;j<=rj;j++)
                map[li-1][j]=map[ri+1][j]=true;
            for(i=li;i<=ri;i++)
                map[i][lj-1]=map[i][rj+1]=true;
            //for(i=li-1;i<=ri+1;i++,puts(""))
            //    for(j=lj-1;j<=rj+1;j++)
            //        printf("%d ",map[i][j]?1:0);
            for(k=t=0,i=j=60;k<n;k++)
            {
                for(v=0;;v++)
                {
                    i+=d[t][0];
                    j+=d[t][1];
                    if(map[i][j])
                    {
                        i-=d[t][0];
                        j-=d[t][1];
                        break;
                    }
                    map[i][j]=true;
                }
                if(k+1<n&&v!=a[k])
                    return -1;
                t=(t+1)%4;
            }
            return w*h;
        } 
        

}; 

 

 

1000pt

题意:

给定至多62个颜色唯一的矩形,把它们按照一定顺序放到网格图内,后放的矩形会覆盖前面所放的,所有矩形都没有被完全覆盖,求矩形的放置顺序(若有多个解,字典序最小)

 

分析:

看了半天,终于看出是拓扑排序。

覆盖是单向关系,即只能是后放的覆盖已放的,这种关系和拓扑很类似,解又是一个顺序,很容易想到是拓扑排序。

  先求出每个矩形长和宽的至少值(与500分题行和列最小值和最大值的求法相同),再求它被哪些矩形所覆盖,构造拓扑边,剩下的就是拓扑排序了。

View Code
char L[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

class TopView 
{ 
        public:
        int toVex(char c)
        {
            int k;
            for(k=0;L[k]!=c;k++);
            return k;
        }
        string findOrder(vector <string> grid) 
        {
            bool covered[66][66],has[66]={false},flag=true;
            string ret;
            int i,j,k,li,lj,ri,rj,n,m,v,w,to[66];
            memset(covered,0,sizeof(covered));
            memset(to,0,sizeof(to));
            n=grid.size();
            m=grid[0].size();
            for(v=0;v<62;v++)
            {
                li=lj=100;
                ri=rj=0;
                for(i=0;i<n;i++)
                {
                    for(j=0;j<m;j++)
                        if(grid[i][j]==L[v])
                        {
                            li=min(li,i);
                            ri=max(ri,i);
                            lj=min(lj,j);
                            rj=max(rj,j);
                        }
                }
                for(i=li;i<=ri;i++)
                    for(j=lj;j<=rj;j++)
                    {
                        has[v]=true;
                        if(grid[i][j]=='.')
                            return "ERROR!";
                        w=toVex(grid[i][j]);
                        if(v!=w)
                            covered[v][w]=true;
                    }
            }
            for(v=0;v<62;v++)
                for(w=0;w<62;w++)
                    if(covered[v][w])
                        to[w]++;
            for(;flag;)
            {
                flag=false;
                for(v=0;v<62;v++)
                    if(has[v]&&to[v]==0)
                    {
                        flag=true;
                        has[v]=false;
                        ret.push_back(L[v]);
                        for(w=0;w<62;w++)
                            if(covered[v][w])
                                to[w]--;
                        break;
                    }
            }
            for(v=0;v<62;v++)
                if(has[v])
                    return "ERROR!";
            return ret;
        } 
        
 
}; 

 

转载于:https://www.cnblogs.com/xchaos/archive/2012/07/29/2613990.html

### 回答1: HASP SRM DRV 550 64是一种用于操作HASP锁的驱动程序。HASP锁是一种用于管理软件授权的硬件加密锁,当用户购买了某个软件的许可证后,软件厂商会将许可证信息加密到该锁中。当用户运行该软件时,软件会通过该锁进行许可证的认证。 为了操作HASP锁,用户需要安装对应的驱动程序。HASP SRM DRV 550 64是专门针对Windows 64位操作系统的驱动程序。其主要功能是与软件程序进行通信,查找和读取HASP锁中的许可证信息,并将该信息传递给软件程序进行验证。同时,该驱动程序还可以监控和管理HASP锁的状态,确保软件授权的安全性和稳定性。 如果用户需要下载HASP SRM DRV 550 64,建议到官方网站或可信赖的第三方网站下载。在下载和安装驱动程序时,应注意选择与自己操作系统和软件版本相对应的驱动程序。还应注意避免下载来历不明或存在安全隐患的驱动程序。在安装完成后,应根据软件使用的要求进行相应的HAS锁设置和管理,确保软件许可证的合法性和正确性。 ### 回答2: HASP SRM DRV 550 64是一个安装在计算机系统中的驱动程序,用于支持HASP SRM加密锁。HASP SRM加密锁是一个受保护的加密设备,可用于保护软件应用程序和敏感数据。使用HASP SRM DRV 550 64驱动程序,可以确保该加密设备在计算机系统中运行正常,从而保护对应的软件和数据的安全。 要下载HASP SRM DRV 550 64驱动程序,可以通过访问SafeNet官网或者各类软件下载网站进行下载。用户可以根据自己的计算机系统环境选择相应的驱动程序版本进行下载,并按照提示完成安装操作。在安装完成后,用户可以在设备管理器中查看是否正确识别了HASP SRM加密锁设备,并确保安装的驱动程序与所使用的软件兼容,保证软件和数据的安全。 总之,HASP SRM DRV 550 64是一个用于保护软件和数据安全的重要驱动程序。用户可以通过正规渠道进行下载和安装,避免因使用不当造成的安全问题。 ### 回答3: Hasp SRM DRV 550 64是一款用于保护软件授权的加密狗驱动程序。如果您需要下载该驱动,您可以在Internet上搜索该名称,然后前往官方网站或可信网站下载该驱动程序。下载后,您需要将其安装到计算机上,以便软件程序可以识别加密狗,并使用受保护的软件功能。 您应该只从官方或可信的网站下载驱动程序,以确保安全性和完整性。请小心避免下载到潜在的恶意软件,这可能会导致您的计算机系统受到损害或数据被窃取。 总之,Hasp SRM DRV 550 64是一款重要的软件授权保护工具,下载前请确保您正在访问可信源,以避免任何潜在的安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值