蒟蒻我可能考了一场假试

T1 绩点

这题没什么好说的,应该是只要会语言的就会做。

T2 巨大的棋盘

一个模拟题吧qwq,但是要注意取模的时候先加上n或者m再取模,要不然会错的。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAXN 100010
using namespace std;
int n,m,t,q;
string s;
long long x[MAXN],y[MAXN],up,down,le,ri;
int main()
{
scanf("%d%d%d",&n,&m,&t);
cin>>s;
for(int i=0;i<s.length();i++)
{
if(s[i]=='U') up++;
else if(s[i]=='D') down++;
else if(s[i]=='L') le++;
else ri++;
}
scanf("%d",&q);
for(int i=1;i<=q;i++)
scanf("%lld%lld",&x[i],&y[i]);
up*=t;
down*=t;
le*=t;
ri*=t;
//printf("up=%d\ndown=%d\nleft=%d\nright=%d\n",up,down,le,ri);
for(int i=1;i<=q;i++)
{
long long ansx=x[i]+down-up;
while(ansx<=0) ansx+=n;
ansx=ansx%n;
if(ansx==0) ansx=n;
long long ansy=y[i]+ri-le;
while(ansy<=0) ansy+=m;
ansy=ansy%m;
if(ansy==0) ansy=m;
printf("%lld %lld\n",ansx,ansy);
} return 0;
}

T3 括号

这个题是我考试的时候真的不会写qwq,猜测是组合计数问题??然而WA掉了,连样例都过不去qwq。

之后就开始想DP,但是看看数据范围,感觉会MLE??还是不会做啊qwq

不会写正解,就也不想写暴力部分分了qwq,最后弃掉了这个题。

考完试了之后看了dalao的代码恍然大悟,原来可以优化掉数组的第一维。。。。。。。

代码和注释如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define mod 1000000007
using namespace std;
long long dp[10010];
//我们设dp[i][j]表示到第i个括号的时候有j个左括号没有匹配上的方案数,然后这里优化掉第一维,只保留第二维
char ch[10010];
int n;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
cin>>ch[i];
dp[0]=1;
//DP初始化,都匹配上的话自然是存在一种情况的
for(int i=0;i<n;i++)
{
if(ch[i]=='(')
for(int j=n-i-1;j>=0;j--)
dp[j+1]=(dp[j]+dp[j+1])%mod;
//如果是左括号的话,自然是又多一种无法匹配到的状态,因为我们表示的是有j个左括号没有匹配到的方案数,所以+1并且后面的由前面转移过来
//而因为已经匹配到i了,所以.....j到n-i就可以了
else
for(int j=1;j<=n-i;j++)
dp[j-1]=(dp[j]+dp[j-1])%mod;
//原理同上
}
printf("%lld\n",(dp[0]-1)%mod);
//这里的减一是因为所有括号都被删除的情况不符合题目要求,所以方案数--
return 0;
}

T4 配对

官方题解是这样说的:qwq

  • 直接枚举选择哪些字母配对很慢,可以考虑枚举联通块。当K>7时,显然所有串都能 相同了,因为只需要7条边就能让所有字母等价。
  • 因此考虑枚举字母的联通块情况。而贪心地想,K肯定用完最好,因此联通块情况就只 有S(8,8-K)种情况,其中S为第二类斯特林数。
  • N=8时的斯特林数,0 1 127 966 1701 1050 266 28 1
  • 实际可以跑一个爆搜看看要遍历多少个状态
  • 枚举完联通块情况后,每个字符串中,每种字符替代为对应联通块编号,变成等价的 字符串。
  • 然后计算哈希排序算等价对数。但这样可能超时。算一次哈希的复杂度为O(L)。可以 按字母分别维护每个字母出现位置的哈希值,重新算时复杂度是O(Σ),而不是O(L)的。





    qwq然鹅我并不会做这种解法的!

    所以。。。我们可以尝试。。。并查集!!

    我们首先可以知道,因为最后就只有小写字母的前8个,所以我们考虑联通块情况,最多只需要7次转换,所有字串就一定可能相同。

    然后如果小于7次......我们可以先预处理出同位字符与其对应字符对应的最大数(啊啊啊,语文掉线了qwq不知道怎么表述啊qwq),就是比如同位(同一列)a对应的有两个b,一个c。。。我们先把个数存下来,然后之后转换的时候肯定选取较大的那个转换(a转换成b而不是c)(emmmm。。。如果这个不理解的话,可以把我代码里的注释去掉看一下就明白了qwq)

    然后就是init(),我们把每个字母的每次转换都进行连边操作,将他们的sum值记录成边权值。

    之后因为转换存在传递性,我们就执行并查集合并操作,因为肯定是每次转换尽可能让更多的同位字母相等,所以我们可以先将边权从大到小排序,然后每次选大的那个连起来,之后合并qwq(这样肯定是最优的),注意如果连的边达到k个要及时跳出。

    之后呢就是最后的统计ans,我们将每个字串和其匹配字串都枚举一边,然后逐个判断是否合法。。。。感觉时间复杂度还是有点高的qwq但是可能是因为及时return+评测机快qwq跑的还是很快的qwq。。。。。。

    代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAXN 110
using namespace std;
int n,l,k,edge_number,cnt,ans;
int sum[10][10],fa[10],done[MAXN][MAXN];
char s[MAXN][1100];
struct Edge{int x,y,len;}edge[MAXN];
bool cmp(struct Edge x,struct Edge y){return x.len>y.len;}
inline void init()
{
for(int i=0;i<8;i++)
for(int j=i+1;j<8;j++)
{
edge[++edge_number].x=i;
edge[edge_number].y=j;
edge[edge_number].len=sum[i][j];
}
}
inline int find(int x)
{
if(fa[x]==x) return x;
else return fa[x]=find(fa[x]);
}
inline bool check(int x,int y)
{
for(int i=0;i<l;i++)
if(find(s[x][i]-'a')!=find(s[y][i]-'a')) return false;
return true;
}
int main()
{
scanf("%d%d%d",&n,&l,&k);
for(int i=1;i<=n;i++)
scanf("%s",&s[i]);
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
for(int q=0;q<l;q++)
if(s[i][q]!=s[j][q])
sum[s[i][q]-'a'][s[j][q]-'a']++,sum[s[j][q]-'a'][s[i][q]-'a']++;
/*for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
cout<<sum[i][j]<<" ";
cout<<endl;
}*/
init();
for(int i=0;i<8;i++) fa[i]=i;
sort(edge+1,edge+1+edge_number,cmp);
for(int i=1;i<=edge_number;i++)
{
int a=find(edge[i].x);
int b=find(edge[i].y);
if(a!=b)
fa[a]=b,cnt++;
if(cnt==k) break;
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(done[i][j]||done[j][i]) continue;
if(check(i,j))
{
ans++;
done[i][j]=1;
done[j][i]=1;
}
}
}
printf("%d\n",ans);
return 0;
}

(话说nowcoder的评测真的快qwq)

nowcoder(牛客网)普及组模拟赛第一场 解题报告的更多相关文章

  1. nowcoder(牛客网)提高组模拟赛第一场 解题报告

    T1 中位数(二分) 这个题是一个二分(听说是上周atcoder beginner contest的D题???) 我们可以开一个数组b存a,sort然后二分b进行check(从后往前直接遍历check ...

  2. nowcoder(牛客网)提高组模拟赛第四场 解题报告

    T1 动态点分治 就是模拟..... 但是没有过!! 看了题解之后发现.... 坑点:有可能 \(x<=r\),但是

  3. 牛客网提高组模拟赛第七场 T3 洞穴(附bitset介绍)

    就是DP. 我们可以很简单的想到要枚举中间点,进行边数的转移. 但是因为边长数据范围很大,所以我们考虑log的倍增. 状态设计为\(dp[i][j][k]\),为从节点\(i\)走\(2^k\)步能否 ...

  4. 牛客网提高组模拟赛第七场 T2 随机生成树

    其实看懂题就很水啦qwq,就是求\(1-N\)的约数啦. 暴力求的话时间复杂度是\(O(NlogN)\)的,其实正解是枚举每个数的倍数......这样的时间复杂度是\(\frac{N}{1}+\fra ...

  5. 牛客网提高组模拟赛第五场 T1同余方程(异或)(位运算)

    区间不好做,但是我们可以转化成前缀来做.转化为前缀之后之后就是二维前缀和. 但是我还是不怎么会做.所以只能去看吉老师的题解 (确定写的那么简单真的是题解???). 我们要求模一个数余0,就等于找它的倍 ...

  6. ZROI 普及组模拟赛02总结

    ZROI 普及组模拟赛02总结 先放[网址][http://zhengruioi.com/contest/96] 可能是有一段时间没有打这种正式的比赛了,今天打的很奇怪... T1 模拟水题 既然是普 ...

  7. 18/9/16牛客网提高组Day2

    牛客网提高组Day2 T1 方差 第一眼看就知道要打暴力啊,然而并没有想到去化简式子... 可能因为昨晚没睡好,今天上午困死 导致暴力打了一个半小时,还不对... #include <algor ...

  8. 18/9/9牛客网提高组Day1

    牛客网提高组Day1 T1 中位数 这好像是主席树??听说过,不会啊... 最后只打了个暴力,可能是n2logn? 只过了前30%  qwq #include<algorithm> #in ...

  9. 2017.1.16【初中部 】普及组模拟赛C组总结

    2017.1.16[初中部 ]普及组模拟赛C组 这次总结我赶时间,不写这么详细了. 话说这次比赛,我虽然翻了个大车,但一天之内AK,我感到很高兴 比赛 0+15+0+100=115 改题 AK 一.c ...

随机推荐

  1. Elasticsearch 搜索引擎

    简介: Elasticsearch 是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据.它可以用于全文搜索,结构化搜索以及分析.    分布式实时文件存储,并将每一个字段都 ...

  2. Zabbix 监控 Mysql 状态

    简介: 如何使用 Zabbix 来监控 Mysql 状态 ? Zabbix 有自带监控 Mysql 的模板,但是却不能直接使用.. 需要我们根据模板提供的 Key 自己写脚本获取数据 1.查看都有哪些 ...

  3. springboot 的定时任务使用

    定时任务在Spring Boot中的集成 在启动类中加入开启定时任务的注解: 在SpringBoot中使用定时任务相当的简单.首先,我们在启动类中加入@EnableScheduling来开启定时任务. ...

  4. 微信小程序相关一、模仿京东静态登录页面

    一.培训的第一天,基本上没有什么最新的东西,但是看到老师的代码收获的确实是不少. 1.1.首页代码很简洁,将共有的样式都提取的很好. 1.2.其次是每一个小块写样式的时候用到了好多子代选择器和后代选择 ...

  5. 关于IOS新手在安装cocoa pods失败,因为ruby版本过低的解决方法+ (void) {升级ruby}

    http://blog.csdn.net/zhaoen95/article/details/51995520     现在: 使用 OS 系统, 正在学习iOS 需要配置cocoapods 命令行中显 ...

  6. nodejs、webpack

    开发环境,直接本机下载代码回来,装好nodejs.webpack(安装方法 npm install webpack -g), 切换到项目根目录下 1.安装依赖:npm install 2.执行webp ...

  7. jquery函数$.proxy简单示例

    来自于<jquery 权威指南> ------------------------------ <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  8. IntelliJ IDEA 安装

    1.在终端输入sudo vim /private/etc/hosts 2.在打开的hosts文件中,在尾行添加 0.0.0.0 account.jetbrains.com 3.去网站http://id ...

  9. 【转载】mysql中timestamp,datetime,int类型的区别与优劣

    转载来自souldak,微博:@evagle以下内容整合筛选自互联网: int1. 占用4个字节2. 建立索引之后,查询速度快3. 条件范围搜索可以使用使用between4. 不能使用mysql提供的 ...

  10. 高并发Redis(Mac)环境配置(一)

    一.产生原因: SNS交互型网站的兴起,对于高并发,大负载数据的操作,海量数据的存储和访问 NoSql四种类型: 键值存储(Redis优点可以快速查询,缺点缺少存储的结构化)              ...