A. Technogoblet of Fire

题意:n个人分别属于m个不同的学校 每个学校的最强者能够选中 黑客要使 k个他选中的可以稳被选 所以就为这k个人伪造学校 问最小需要伪造多少个

思路:记录每个学校都有哪些人 每次看黑客选中的人是不是在学校是最强者(这里要处理能力一样的情况,如果有能力一样的为了保证稳进也要伪造一个学校) 然后就是模拟了

  1. #include<bits/stdc++.h>
  2. #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
  3. #define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
  4. #define F first
  5. #define S second
  6. #define pii pair<int ,int >
  7. #define mkp make_pair
  8. #define pb push_back
  9. using namespace std;
  10. const int maxn=+;
  11. vector<pii>v[maxn];
  12. int p[maxn],s[maxn];
  13.  
  14. int main(){
  15. int n,m,k;
  16. scanf("%d%d%d",&n,&m,&k);
  17. FOR(i,,n)scanf("%d",&p[i]);
  18. FOR(i,,n){
  19. scanf("%d",&s[i]);
  20. v[s[i]].pb(mkp(p[i],i));
  21. }
  22. int cnt=;
  23. int id;
  24. FOR(i,,k-){
  25. scanf("%d",&id);
  26. for(int j=;j<v[s[id]].size();j++){
  27. if(v[s[id]][j].F>=p[id]&&v[s[id]][j].S!=id){
  28. cnt++;
  29. break;
  30. }
  31. }
  32. for(int j=;j<v[s[id]].size();j++){
  33. if(v[s[id]][j]==mkp(p[id],s[id])){
  34. v[s[id]].erase(v[s[id]].begin()+j);
  35. break;
  36. }
  37. }
  38. }
  39. cout<<cnt<<endl;
  40. return ;
  41. }
B. Mike and Children
题意:给出N个数  每个数都不一样 两两组合 问使组合后的和相等的 最大对数是几
思路:因为每个数字都不一样 直接暴力枚举每个可能的值即可
  1. #include<bits/stdc++.h>
  2. #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
  3. #define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
  4. #define F first
  5. #define S second
  6. #define pii pair<int ,int >
  7. #define mkp make_pair
  8. #define pb push_back
  9. using namespace std;
  10. const int maxn=+;
  11. vector<pii>v[maxn];
  12. int a[maxn],s[maxn];
  13. set<int>q;
  14. map<int,int>mp;
  15. int main(){
  16. int n;
  17. scanf("%d",&n);
  18. FOR(i,,n-){scanf("%d",&a[i]);}
  19. int cnt=;
  20. int id=;
  21. FOR(i,,n-){
  22. FOR(j,i+,n-){
  23. q.insert(a[i]+a[j]);
  24. mp[a[i]+a[j]]++;
  25. if(cnt<mp[a[i]+a[j]]){
  26. cnt=mp[a[i]+a[j]];
  27. id=a[i]+a[j];
  28. }
  29. }
  30. }
  31.  
  32. cout<<cnt<<endl;
  33. }

C. System Testing

题意:一秒测试一个样例 一共有m台机器和n个题目 给出每个题目的样例数  问存在多少个round(100*ok/n) ==当前测试到的样例数 ok是已经完成的题数

思路:这里刚开始写的时候是用优先队列模拟的,会出现一个bug 因为是并行计算的,所以当前最先完成测试的题目 测试到的样例 满足round(100*ok/n)==样例数 可能会出现在上上个题目之前(包含上上个)  这样就会统计不到

所以还是离散化秒数 用秒模拟即可(这题的数据范围是允许的) 参考了超哥的代码

  1. #include<bits/stdc++.h>
  2. #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
  3. #define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
  4. #define F first
  5. #define S second
  6. #define pii pair<int ,int >
  7. #define mkp make_pair
  8. #define pb push_back
  9. using namespace std;
  10. const int maxn=+;
  11. int vis[maxn],mk[maxn],p[maxn],a[maxn];
  12. int ans=;
  13. double ti=0.5;
  14. int main(){
  15. int n,k,m;
  16. scanf("%d%d",&n,&k);
  17. m=;
  18. int tmp;
  19. FOR(i,,n){
  20. scanf("%d",&a[i]);
  21. }
  22. k=min(n,k);
  23. FOR(i,,k)vis[i]=;
  24. for(;;ti+=){
  25. for(int i=;i<=n;i++){
  26. if(vis[i]==)p[i]++;
  27. }
  28.  
  29. int d=round(100.0*m/n);
  30.  
  31. for(int i=;i<=n;i++){
  32. if(vis[i]==&&p[i]==d&&!mk[i]){ans++;mk[i]=;}
  33. }
  34.  
  35. for(int i=;i<=n;i++){
  36. if(p[i]==a[i]&&vis[i]==){
  37. m++;
  38. vis[i]=-;
  39. for(int j=i+;j<=n;j++){
  40. if(!vis[j]){vis[j]=;break;}
  41. }
  42. }
  43. }
  44. if(m==n)break;
  45. }
  46. cout<<ans<<endl;
  47. return ;
  48. }

F. Compress String

把一个字符串包装成很多个连续的部分  单个字符串需要消耗a  如果    tl tl+1 ...tr是前面t1...tl-1的子序列只需要消耗b问最小代价

思路:维护一个最长公共子串详细见代码

  1. #include<bits/stdc++.h>
  2. #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
  3. #define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
  4. #define F first
  5. #define S second
  6. #define pii pair<int ,int >
  7. #define mkp make_pair
  8. #define pb push_back
  9. using namespace std;
  10. const int maxn=+;
  11. int dp[maxn];
  12. int lcs[maxn][maxn];
  13. char s[maxn];
  14. int main(){
  15. int n,a,b;
  16. scanf("%d%d%d",&n,&a,&b);
  17. scanf("%s",s+);
  18. FOR(i,,n){
  19. dp[i]=dp[i-]+a;//初始化删一个
  20. FOR(j,,i-){
  21. if(s[i]==s[j])lcs[i][j]=lcs[i-][j-]+;// 维护前i个和前j的最长公共子串并且终点是在i的
  22. if(lcs[i][j]!=&&i-j>=lcs[i][j])dp[i]=min(dp[i],dp[i-lcs[i][j]]+b);//如果1-i,1-j存在公共子串其中一个终点在i并且大区间(也就是终点的i)的起点在小区间的前面 即可更新dp[i][j] 可画图理解其正确性
  23. }
  24. }
  25. cout<<dp[n]<<endl;
  26. return ;
  27. }

Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round)的更多相关文章

  1. cf 20190307 Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round)

    B. Mike and Children time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  2. Codeforces Round #543 (Div. 1, based on Technocup 2019 Final Round) 题解

    题面戳这里 A. Diana and Liana 首先如果s>ks>ks>k一定无解,特判一下.那么我们考虑找恰好满足满足题目中的要求的区间[l,r][l,r][l,r],那么需要要 ...

  3. Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)

    Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) #include <bits/stdc++ ...

  4. (AB)Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round

    A. Right-Left Cipher time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path

    http://codeforces.com/contest/1072/problem/D bfs 走1步的最佳状态 -> 走2步的最佳状态 -> …… #include <bits/ ...

  6. Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path(字典序)

    https://codeforces.com/contest/1072/problem/D 题意 给你一个n*n充满小写字母的矩阵,你可以更改任意k个格子的字符,然后输出字典序最小的从[1,1]到[n ...

  7. Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】

    传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...

  8. Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) C. Vasya and Golden Ticket 【。。。】

    任意门:http://codeforces.com/contest/1058/problem/C C. Vasya and Golden Ticket time limit per test 1 se ...

  9. Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)B. World Cup

    The last stage of Football World Cup is played using the play-off system. There are n teams left in ...

随机推荐

  1. git仓库迁移

    最近,装了git的本地服务器坏掉了, 没办法只能临时进行仓库的迁移  保证项目正常进行 在项目的根目录执行右键执行 查询当前仓库的远程地址 git remote -v 查看现有远程仓库的地址url 修 ...

  2. .Net高级进阶,教你如何构建企业模型数据拦截层,动态控制字段验证

    现在,你有一个MVC架构的web项目,你要完成一个注册功能. 前台传了3个值到你的控制器,分别是账号.密码.邮箱. 如图:现在你要在控制器里面判断,账号名称.密码.邮箱不能为空,并且名称和密码不超过1 ...

  3. asp.net core C#设计一个实用的线程池

    菜菜呀,我最近研究技术呢,发现线上一个任务程序线程数有点多呀 CEO,CTO,CFO于一身的CXO x总,你学编程呢? 菜菜 作为公司总负责人,我以后还要管理技术部门呢,怎么能不会技术呢 CEO,CT ...

  4. WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)

    1.使用WCF请求与答复模式须知 (1).客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后 ...

  5. H5 19-序选择器下

    19-序选择器下 我是项目 我是项目 我是项目 我是项目 我是项目 我是项目 我是项目 <!DOCTYPE html> <html lang="en"> & ...

  6. HDU 3478 Catch (连通性&&二分图判断)

    链接 [https://vjudge.net/contest/281085#problem/C] 题意 一个n个点,m条边的图,开始的点是s 每次必须移动到相邻的位置,问你是否存在某个时刻所有点都可能 ...

  7. 福州大学软件工程1816 | W班 第4次作业(团队展示)成绩排名

    作业链接 评分细则 队员姓名与学号(标记组长),其中4-7人一组,特殊情况经老师允许后可以突破限制:(1分) 队名(体现项目内容,并要求有亮点与个性):(1分) 拟作的团队项目描述:一句话(中英文不限 ...

  8. 【学习总结】vi/vim命令是使用

    每次要么想不起来用,要么进去了出不来,真是醉了.痛定思痛此处填坑. 参考教程:菜鸟教程vi/vim 实验环境:借Git-bash宝地一用 注意:记住关键的步骤! 按i a o进入输入模式(即使有时按v ...

  9. 基于CRM跟进(活动)记录中关键字识别的客户跟进加权值的成单概率算法

    1.提取销售人员的跟进记录,分析其中的骂人文字(负面情绪),将有负面情绪的客户的跟进排期,进行降权(权重)操作.重点跟进加权值较高的客户. 执行办法: 将销售与客户沟通的语音:电话,微信,QQ,通过调 ...

  10. YOLO.h5 下载

    链接:https://pan.baidu.com/s/1sTxkuaFWXqT4yXLHQ9BgUA 密码:ga0o fhwayd_w1231234asd><321$%