11.4模拟赛
来源:互联网 发布:php 在线直播 编辑:程序博客网 时间:2024/05/25 19:59
= =打了一次模拟赛把,做了差不多2个小时,140分= =,其实题目蛮简单的,第一题是关于字符串的匹配问题,n<=100的数据,O(n3)算法随便过啊,毫无疑问的a掉了。
代码
#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<algorithm>using namespace std;string s;int difa,difb,p,ans;int main(){ //freopen("message.in","r",stdin); //freopen("message.out","w",stdout); cin>>s; int l=s.length(); for (int i=0;i<l;i++) { for (int j=i+1;j<l;j++) { if (s[i]==s[j]) { difa=i; difb=j; p=0; while(s[difa]==s[difb]&&difa<l&&difb<l) { //cout<<difa<<' '<<difb<<' '; difa++; difb++; p++; } if(p>ans)ans=p; //if (p==7)cout<<i<<' '<<j; } } } cout<<ans; //fclose(stdin); //fclose(stdout); return 0; }
第二题是一个向日葵,题解应该是贪心(Kruskal)求最大生成森林,然后用所有边减去最大生成森林的边权。题目实际也并不难,然而犯了傻逼错误数组开小了,边的个数开了100000的数组,然而数据范围是200000的QAQ,非常非常伤心,于是只得了40分TAT。
#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<algorithm>using namespace std;struct edge{ int u,v,w;}e[200010];int n,m,ji[100010],fat[100010];long long int ans,cnt,tot=0;int father(int x){if (fat[x]==x)return x;else {fat[x]=father(fat[x]); return fat[x];}}int cmp(const edge &x,const edge &y) {return x.w>y.w;}int unionn(int x,int y){int fa=father(x),fb=father(y);if (fa==fb)return 0;fat[fa]=fb;return 1;}int main(){ //freopen("sunflower.in","r",stdin); //freopen("sunflower.out","w",stdout); cin>>n>>m; for (int i=1;i<=m;i++) { scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); tot+=e[i].w; } for (int i=1;i<=n;i++) fat[i]=i; sort(e+1,e+m+1,cmp); for (int i=1;i<=m;i++) { if(unionn(e[i].u,e[i].v)) { cnt++; ans+=e[i].w; if (cnt==n-1)break; } } cout<<tot-ans; return 0; //fclose(stdin); //fclose(stdout); return 0; }
t3原本以为是组合数问题,认真看了看题发现可以用容斥+hash做
= =然后读入的处理就出现了问题,调了一个小时都没调出来,果断写了一个30分的暴力,然后大休心切交上了程序。QAQ结果暴力都没对,一脸肯定地跟sky说这题用容斥来做,然后就被打脸了23333.
看了一下hzw的题解好像不难,并不是很喜欢hzw的代码风格,特别紧凑,但是能很轻易地看出dalao高超的代码水平,毕竟也是金牌dalao。我这种蒟蒻能拿1=就很满足了QAQ。
#include<cstdio>int a[10],cnt[1024];long long ans;char B[1<<26];int main(){ //freopen("pals.in","r",stdin); //freopen("pals.out","w",stdout); register int n; scanf("%d",&n),ans=1ll*n*(n-1)/2,fread(B,1,1<<26,stdin); for(char *S=B;n--;){ int x=0; for(;*S<'0';S++); for(;a[*S++-'0']=1,*S>='0';); for(int i=0;i<10;i++)x+=a[i]<<i,a[i]=0; cnt[x]++; } for(int i=0;i<1024;i++) for(int j=i+1;j<1024;j++) if((i&j)==0)ans-=1ll*cnt[i]*cnt[j]; printf("%lld",ans); //fclose(stdin); //fclose(stdout); return 0;}
此题用了大量的位运算,不得佩服黄学长深厚的代码水平。
• 由于 123 和 321 在这道题中是等价的,因此我们只需记录
⼀个数里面哪些数字出现过了
• 由于 210=1024,所以统计的时候用 1024*1024 的复杂度没
有问题。采用补集思想,所有合法⽅案数为 n · (n − 1)/2,
其中不合法⽅ 案为
1023 1023
∑ ∑ [i&j == 0] · cnti · cntj
i=0 j=i+1
0 0
- 11.4模拟赛
- 11.4模拟赛感言
- 11.4模拟赛总结
- 模拟赛
- 模拟赛~~
- 17.7.7 NOIP模拟赛 【模拟/数据结构】【模拟】
- 【模拟】【程序】2015.8.1noip模拟赛
- Loi 模拟赛 贪心+模拟+DP+数论
- NOIP2015模拟11.4总结
- 【GDOI2017模拟11.4】Walk
- GDOI2017模拟11.4 总结
- 模拟赛总结。
- Vijos模拟赛
- 模拟赛 数列
- 模拟赛 无线通讯网
- 模拟赛 上白泽慧音
- 模拟赛 东风谷早苗
- 模拟赛 某种密码()
- java-mysql 基本操作3
- CSS设置菜单的横竖转换
- window.innerWidth以及window.outerWidth的区别
- null和undefined的区别整理
- Unity的Json解析<一>--读取Json文件
- 11.4模拟赛
- oracle新建数据库实例脚本sql
- c++继承
- Mysql集群的HA原理及配置指南之主备模式(一)
- ListView中CheckBox和EditText重用问题解决方法
- 链式前向星
- PHP是世界上最好的语言
- makefile初步
- 数组概念和案例