题目来源:清北学堂

天天寄快递
express.in/.out/.cpp
【问题描述】
天天暑假时帮别⼈寄送快递,经历了⼀个暑假,天天积累了不少数据,
想对快递公司进⾏⼀下评分,得到快递公司的质量⽔平。
总共有 n 家快递公司,编号为 1..n。现在天天有 m 天的寄送快递数据,
其中第 i 天使⽤第 e i 家快递公司,快递在路上花了 t i 天时间。⼀开始每个
快递公司的评分都为 0,对于⼀家快递公司,如果⼀个包裹花了 t i 天寄到,
那么对这家快递公司的评分贡献为 2−t i , (如果花的时间超过两天得分就会
变成负的啦) 。
然⽽事情没有这么简单,如果某⼀天的数据丢掉了,天天为了公平起见
就忽略掉这天的数据。于是快递公司联盟决定雇佣⼀个⼩偷,⼩偷可以偷⾛
最多 s 天的数据,使得每个公司的信⽤得分⾄少增加 k,且所有快递公司的
信⽤总和尽量⼤。
若如果被偷以后,⽆法让每个公司的信⽤得分都⾄少增加 k,输出
−23333333,否则请你输出被偷后, 所有快递公司的信⽤得分的和最多增
加多少。
【输入格式】
第⼀⾏四个整数 n,m,s,k,其中 1 ≤ n,m ≤ 100,000,0 ≤ s ≤ m,0 ≤
k ≤ 10 9 。
接下来 m ⾏,每⾏两个整数。接下来的第 i ⾏为 e i ,t i ,其中 1 ≤ e i ≤
n,0 ≤ t i ≤ 10 9 。
【输出格式】
⼀个整数,为题⽬要求的答案。
2
【样例输入】
2 5 4 22
1 1
1 40
2 25
2 30
2 0
【样例输出】
89
【样例解释】
⼩偷可以偷 4 天的数据,但是⼩偷实际上只偷了第 2,3,4 天的数据,1
号公司获得了 38 分的提升,2 号公司获得了 23 + 28 分的提升,都满⾜了
最⼩提升 22 分的要求。
【数据规模和约定】
对于 30% 的数据,1 ≤ n,m ≤ 20。
对于 100% 的数据,1 ≤ n,m ≤ 200,000,。

题解:贪心

代码:

考试30分....就是正解呀....靠 我知道了数组开小了,应该200005 嘤嘤嘤..改了就A 了...

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 100005
int n,m,s,k,tot;
int v[maxn];
long long ans;
inline int read(){char ch=getchar();int x=0,f=1;for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
}struct WW{int id,ad,has;
}w[maxn];bool cmp(WW a,WW b){return a.ad>b.ad;
}bool check(){for(int i=1;i<=n;i++)if(v[i]<k)return 0;return 1;
}int main(){freopen("express.in","r",stdin);freopen("express.out","w",stdout);n=read();m=read();s=read();k=read();//n家快递,m个数据,s天,增加k。for(int i=1;i<=m;i++){w[i].id=read();int x;x=read();w[i].ad=x-2;} sort(w+1,w+m+1,cmp);for(int i=1;i<=m;i++){int id=w[i].id;if(w[i].ad<0)continue;if(v[id]<k){v[id]+=w[i].ad;ans+=w[i].ad;w[i].has=1;tot++;}}if(!check()||tot>s){printf("-23333333\n");fclose(stdin);fclose(stdout);return 0;}sort(w+1,w+m+1,cmp);if(tot<s){for(int i=1;i<=m;i++){if(w[i].has||w[i].ad<0)continue;ans+=w[i].ad;tot++;if(tot==s)break;}}cout<<ans<<endl;fclose(stdin);fclose(stdout);return 0;
}

正解:贪心

局部贪心:为了使每个公司都增加K,每次选可增加次数最多的,一旦增加到了K,就停止。

全局贪心:为了使总和最多,如果还能选每次在剩下选最大的

如果偷了s天仍没有使每个公司增加K,无解

代码:

唉...可能是考试使时间不多了敲得很慌张...按原来思路敲一遍就A了....

清北的题真不错.....

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 200005
using namespace std;int n,m,s,k,day;
int v[maxn];
long long ans;
struct WW{int id,ad,has;
}w[maxn];inline int read(){char ch=getchar();int x=0,f=1;for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
}bool cmp(WW a,WW b){return a.ad>b.ad;
}bool check(){for(int i=1;i<=n;i++)if(v[i]<k)return false;return true;
}int main(){n=read();m=read();s=read();k=read();//n个公司,m个数据,偷s天,每个增加kfor(int i=1;i<=m;i++){int x;w[i].id=read();x=read();w[i].ad=x-2;} sort(w+1,w+m+1,cmp);for(int i=1;i<=m;i++){int ad=w[i].ad,id=w[i].id;if(ad<0)continue;if(v[id]<k){day++;v[id]+=ad;w[i].has=1;ans+=ad;if(day==s)break;}}if(!check()){printf("-23333333\n");return 0;}if(day<s){sort(w+1,w+m+1,cmp);for(int i=1;i<=m;i++){if(w[i].has||w[i].ad<0)continue;ans+=w[i].ad;day++;if(day==s)break;}}cout<<ans<<endl;return 0;
}

天天和不可描述
unknown.in/.out/.cpp
【问题描述】
天天和 () 是好朋友,然⽽总是唱反调。对于⼀个有 () 的字符串,天天
总是会把 () 内的所有东西都倒过来读。
⽐如对于字符串 abc(def) ,天天看到的就是 abcfed 。
括号⾥⾯可能是空的, 也有可能套有多个括号, ⽐如说 abc(hello)(world)lcy()x(owq(zrt))
,天天看到的就是 abcollehdlrowlcyxzrtqwo 。
因为 (owq(zrt)) ⾸先变成了 (trz)qwo ,接下来变成了 zrtqwo ,zrt 被
反转了两次,所以天天看到的还是 zrt。
现在给你⼀个字符串,问你天天看到的是什么样⼦的?
【输入格式】
⼀⾏⼀个字符串,表⽰原始的字符串。保证字符串内只有⼩写字母和 (
以及) 组成。保证括号总是配对的。
【输出格式】
⼀⾏⼀个字符串,表⽰天天看到的字符串。
【样例输入 1】
abc(hello)(world)lcy()x(owq(zrt))
【样例输出 1】
abcollehdlrowlcyxzrtqwo
【样例输入 2】
(y(g(el)da)nis)
4
【样例输出 2】
singleday
【样例输入 3】
mian()
【样例输出 3】
mian
【数据规模和约定】
对于 10% 的数据,保证只出现⼀对括号,字符串长度⼩于 100,000。
对于另外 30% 的数据,保证字符串长度⼩于 100。
对于另外 40% 的数据,保证字符串长度⼩于 100,000。
对于剩余的 20% 的数据,保证字符串长度⼩于 500,000。

题解:

40分比赛代码...辣鸡...    咦?我去评测怎么80分.....T了2个点

统计每个括号的左右位置,stl里的函数进行从右到左翻转,从右到左是为了避免括号套括号混乱的情况

不过看这个得分好像没什么卵用。

//35分钟finish  reverse 只能对字符数组操作
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 500005
using namespace std;int js,top;
int vec[maxn];
char s[maxn];struct WW{int l,r;
}w[maxn];bool cmp(WW a,WW b){return a.l>b.l;
}int main(){freopen("unknown.in","r",stdin);freopen("unknown.out","w",stdout);cin>>s;int len=strlen(s);for(int i=0;i<len;i++){if(s[i]=='('){vec[++top]=i;}if(s[i]==')'){w[++js].l=vec[top--];w[js].r=i;}}sort(w+1,w+js+1,cmp);for(int i=1;i<=js;i++){int l=w[i].l,r=w[i].r;reverse(s+l,s+r+1);}for(int i=0;i<len;i++)if(s[i]>='a'&&s[i]<='z')printf("%c",s[i]);fclose(stdin);fclose(stdout);return 0;
}

罪犯分组
prison.in/.out/.cpp
【问题描述】
B 城有1座监狱,1共关押着 N 名罪犯,编号分别为 1-N。
他们的关系十分不和谐。很多罪犯之间甚至积怨已久,如果客观条件具
备则随时可能爆发冲突。
在详细考察了 N 名罪犯间的⽭盾关系后,警察局长发现罪犯之间的⽭
盾关系可以⽤⼀个 N 个点 M 条边的⽆向图来表⽰:如果 x 到 y 有⼀条边,
表⽰罪犯 x 和罪犯 y 有⽭盾。
现在警察局长要把这些罪犯分成⼀些⼩组,每名罪犯属于且仅属于⼀个
⼩组。
为了开展活动顺利,要求每个⼩组内最多有 K 对罪犯有⽭盾,同时为
了管理⽅便,警察局长希望最小化分成的⼩组数量。
那么,应如何分配罪犯,才能使分成的⼩组数量最少?这个最⼩值是多
少?
【输入格式】
第3 个整数,N,M,K,意义见上述。
接下来 M 行,每行两个数字 x,y。表示x 和 y 之间有⽭盾。
【输出格式】
输出一行一个个值,表示最少的分组数量。
【样例输入】
3 3 1
1 2
2 3
1 3
6
【样例输出】
2
【数据规模和约定】
对于每个测试点,N 分别等于 2,4,6,8,10,12,14,15,16,16。
0 ≤ M,K ≤
N(N−1)
2
保证是1个无自环、无重边的无向图。

题解:

莫名其妙乱搞60分...受宠若惊...

乱合并..能一个房间就一个房间...顺便记录每个房间有多少个仇家。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;vector<int>vec[22];
int n,m,k,ans;
int fa[22],d[22][22],tmp[22],v[22];int f(int x){return fa[x]==x?x:fa[x]=f(fa[x]);
}void change(int fx,int fy){for(int i=0;i<vec[fx].size();i++){int p=vec[fx][i];tmp[i]=p;}for(int i=0;i<vec[fy].size();i++){int p=vec[fy][i];vec[fx].push_back(p); }for(int i=0;i<vec[fx].size();i++){vec[fy].push_back(tmp[i]); }return;
}
int main(){freopen("prison.in","r",stdin);freopen("prison.out","w",stdout);scanf("%d%d%d",&n,&m,&k);ans=n;for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);d[x][y]=d[y][x]=1;}for(int i=1;i<=n;i++)fa[i]=i,vec[i].push_back(i);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int fx=f(i),fy=f(j);if(fx==fy)continue;        int sum=0;for(int p=0;p<vec[fx].size();p++){int g=vec[fx][p];if(d[j][g]&&g!=i)sum++;}for(int p=0;p<vec[fy].size();p++){int g=vec[fy][p];if(d[i][g])sum++;}if(sum+v[fx]+v[fy]<=k){fa[fx]=fy;v[fy]+=sum+v[fx];ans--;    change(fx,fy);if(ans==1){printf("1\n");fclose(stdin);fclose(stdout);return 0;}break;}}}printf("%d\n",ans);fclose(stdin);fclose(stdout);return 0;
}

转载于:https://www.cnblogs.com/zzyh/p/7537868.html

9.17模拟赛2.0相关推荐

  1. 【zoj 3547】【zoj 3548】8.17模拟赛

    题目来源:未知,zoj3547,3548 t1 [问题描述] 若干年之后,XJH找工作面试,面试官给了他这样一个题目. 你有一个N*N的回型矩阵,保证N是奇数. 例如,当N=5的时候,矩阵如下: 现在 ...

  2. 2021/2/17模拟赛

    T1音量调节 一看这数据范围,不就dfs么. #include <bits/stdc++.h> using namespace std; int a[6666],n,beg,maxx,an ...

  3. NOIP模拟赛 17.10.10

    初次见面(firstmeet) [题目背景] 雾之湖边,静得可怕. 露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之 湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她 ...

  4. 2020.03.18模拟赛17(第二题)

    2.[GDKOI训练]音乐节拍(mnotes) 题目描述 FJ准备教他的奶牛弹奏一首歌曲,歌曲由N(1<=N<=50,000)种音节组成,编号为1到N,而且一定按照从1到N的顺序进行弹奏, ...

  5. 2020.03.18模拟赛17(第三题)

    3.[GDKOI训练]电视游戏问题(vidgame) 题目描述 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶教授的做法拿她们去电击戒瘾的,可是后来他发现奶牛们玩游戏之后比原先产更多的奶.很明显,这是 ...

  6. 2018年10月17日普级B组【模拟赛】

    2018年10月17日普级B组模拟赛2018年10月17日普级B组模拟赛2018年10月17日普级B组模拟赛 第一题--ISBN号码第一题--ISBN号码第一题--ISBN号码 博客链接: https ...

  7. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  8. 【模拟赛】10.15—10.17

    背景: 继国庆自闭四联考之后,确实,是很自闭,还做了些比较疯狂的事情,然后顿悟了很多,然后刚知道怎么去努力,刚知道努力的方法和方向就赶快滚回来写博客了,毕竟是在将近考试的时候出现了问题,还是赶快狗回来 ...

  9. 纪中集训2020.01.16【NOIP普及组】模拟赛C组总结+【0.Matrix】分析

    纪中集训2020.01.16[NOIP普及组]模拟赛C组总结+[0.Matrix]分析 题目: 0.matrix 1.product 2.binary 3.value 巨佬估分:100+100+40+ ...

最新文章

  1. python培训深圳-深圳靠谱的Python培训
  2. 4月21日云栖精选夜读:【校园头条】第1期:找实习、找工作时,让你脱颖而出的秘籍...
  3. oracle数据库----笔记1----oracle数据类型
  4. docker的文件流处理_Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken...
  5. halcon/c++接口基础 之 控制参数
  6. Asp.Net Core Mvc Razor之RazorPage
  7. pcfg 自然语言处理_自然语言处理导航
  8. mac Git本地服务器配置
  9. extra增强延迟加载
  10. Chrome 35个开发者工具的小技巧
  11. AI+大数据顶级技术盛会倒计时10天,6.6折票限时特惠!
  12. 50欧姆线设计 高频pcb_高频电路布线的应对方法有哪些?
  13. java 模板组件_9Tile模板和Tile组件创建复合式网页
  14. ODATA入门:$inlinecount,$top,$skip实现
  15. html中的flv视频播放器
  16. cpc按点击计算怎么算_亚马逊CR怎么算?亚马逊CR及CTR计算公式介绍
  17. 检测屏幕.html,15款html5响应式网站跨屏幕测试工具
  18. 源代码安全检测工具PC_Lint与ITS4实例 zz
  19. Dynamo相关下载教程分享!(附软件包和Revit使用插件Revit Lookup下载教程)
  20. Code for city 黑客松大赛——万元大奖等你来拿

热门文章

  1. 残差网络(Residual Network)
  2. win10 中使用bat脚本关机,重启 代码
  3. Java学习(二)---SE阶段回顾
  4. VPU?APU?GPU?折腾从AMD-GPU回到Intel核显+OpenCL+Linux环境搭建
  5. 运筹学基础:第2章-线性规划建模(习题笔记)
  6. web前端 | 博客(二)登录功能
  7. 层压结构及参数(PCB板层厚度)收集
  8. 弹性云服务器有什么用
  9. DOM 对象的方法和属性
  10. 农夫养牛问题怎么用java实现,经典的农夫养牛问题(Java实现)