讲一下这场多校赛里面比较简单的三个题

HDU6045  Is Derek lying?

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6045

题意:有n道题,甲告诉乙,自己做对x道,对方做对了y道,而每道题有ABC三个选项。现在给出他们的卷子两个字符串,表示他们各自每道题的答案,现在请你通过这两个字符串判断甲是否说谎了。

思路:这道题一开始并没有想出来,过了很久才想出来,其实仔细想一下,如果甲没有撒谎,那么甲和乙对于一道题给出同样答案个数应该在一个区间内才对。上界是n-max(x,y)+min(x,y),下界应该是max(x+y-n,0)。

下界比较好理解,比如5个问题,x=3,y=3,那么他们肯定得答对至少相同的一道题,才可以满足。

对于上界可能比较难想,我们假设x<y,如果甲做的题目乙都做对了,但是乙没有做对的题目,加同样也没有作对而且答案还和乙一样,这是不是就是甲和乙相同答案最大的情况,把这段话转换成代码不就是n-max(x,y)+min(x,y)。我们只要确定甲乙两个的相同答案数在这个区间内说明甲没有说谎,否则就是说谎了。

代码:

  1. //Author: xiaowuga
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <set>
  5. #include <vector>
  6. #include <queue>
  7. #include <cmath>
  8. #include <cstring>
  9. #include <cstdio>
  10. #include <ctime>
  11. #include <map>
  12. #include <bitset>
  13. #include <cctype>
  14. #define maxx INT_MAX
  15. #define minn INT_MIN
  16. #define inf 0x3f3f3f3f
  17. #define mem(s,ch) memset(s,ch,sizeof(s))
  18. #define da cout<<da<<endl
  19. #define uoutput(a,i,l,r) for(int i=l;i<r;i++) if(i==l) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
  20. #define doutput(a,i,l,r) for(int i=r-1;i>=0;i--) if(i==r-1) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
  21. const long long N=;
  22. using namespace std;
  23. typedef long long LL;
  24. int main() {
  25. ios::sync_with_stdio(false);cin.tie();
  26. int T,n,x,y;
  27. char q1[N],q2[N];
  28. cin>>T;
  29. while(T--){
  30. cin>>n>>x>>y;
  31. cin>>q1>>q2;
  32. int ct=;
  33. for(int i=;i<n;i++) if(q1[i]==q2[i]) ct++;
  34. int l=x+y-n;
  35. int r=n-max(x,y)+min(x,y);
  36. if(ct>=l&&ct<=r) cout<<"Not lying"<<endl;
  37. else cout<<"Lying"<<endl;
  38. }
  39. return ;
  40. }

HDU6047  Maximum Sequence

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6047

题意:现在有两个数组a,b。a是数组里面有一些数,但是需要处理一个c数组c[i]=a[i]-i,b是可供选择的左边界,用过以后就没有了。然后我们生成以后a数组的后n+1到2*n,我们在求第i个的时候可以选一个左边界,选择这个区间在c这个数组里面的最大值。求如果才能让a[n+1]到a[2*n]这n个数的和最大。

思路:肯定明白先用小的左边界,尽量可以包含最大值,我们我们对左边界排序,然后建立一个优先队列维护这个最大值。在当前边界大小小于堆顶定边界大小的时候,我们可以一直选这个最大值,大于或者等于的时候,把堆顶删除,然后再比较,直到枚举边界值小于堆顶边界值,然后对于新生成的元素我们把他门插入队。看代码吧。

代码:

  1. //Author: xiaowuga
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <set>
  5. #include <vector>
  6. #include <queue>
  7. #include <cmath>
  8. #include <cstring>
  9. #include <cstdio>
  10. #include <ctime>
  11. #include <map>
  12. #include <bitset>
  13. #include <cctype>
  14. #define maxx INT_MAX
  15. #define minn INT_MIN
  16. #define inf 0x3f3f3f3f
  17. #define mem(s,ch) memset(s,ch,sizeof(s))
  18. #define da cout<<da<<endl
  19. #define uoutput(a,i,l,r) for(int i=l;i<r;i++) if(i==l) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
  20. #define doutput(a,i,l,r) for(int i=r-1;i>=0;i--) if(i==r-1) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
  21. const long long N=;
  22. const long long mod=1e9+;
  23. using namespace std;
  24. typedef long long LL;
  25. struct Node{
  26. LL val,pos;
  27. bool operator <(const Node &m) const{
  28. if(val!=m.val) return val<m.val;
  29. else{
  30. return pos>=m.pos;
  31. }
  32. }
  33. };
  34. LL a[*N],b[N];
  35. LL n;
  36. priority_queue<Node>q;
  37. int main() {
  38. ios::sync_with_stdio(false);cin.tie();
  39. while(cin>>n){
  40. while(!q.empty()) q.pop();
  41. for(int i=;i<=n;i++){
  42. cin>>a[i];
  43. q.push((Node){a[i]-i,i});
  44. }
  45. for(int i=;i<=n;i++) cin>>b[i]; sort(b+,b+n+);
  46. int cur=;
  47. for(LL i=n+;i<=*n;i++){
  48. Node t=q.top();
  49. while(b[cur]>t.pos){
  50. q.pop();
  51. t=q.top();
  52. }
  53. t=q.top();
  54. a[i]=t.val;
  55. q.push((Node){a[i]-i,i});
  56. cur++;
  57. }
  58. LL sum=;
  59. for(int i=n+;i<=*n;i++) sum=(sum+a[i])%mod;
  60. cout<<sum<<endl;
  61.  
  62. }
  63. return ;
  64. }

HDU6055 Regular polygon

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6055

题意:给出平面上一些整数坐标的点,问可以形成多少个不同的正多边形。

思路:首先明确一点,官方题解里面也写出来了,整数点形成正多边形只有正方形(比赛的时候就是一直在证明这个搞了好久,早知道应该大胆猜想)。知道这个以后就很简单,枚举两个点直接可以有公式可以算出另外两个点,注意根据这两个点向量方向,计算出的两对不同的点。比如我枚举x,y会算出a,b,但是枚举y,x就会算出c,d两个点,这两对点分布在x,y这个条线的两侧。我们现在只要判断算出来的两个点是否存在,题解用的是map,我用的直接用一个矩阵来记录,但是需要把这个题移到第一象限,这样所有的点才是都是正的,这样对于点查询复杂度就是O(1),速度比较快。

代码:

  1. //Author:xiaowuga
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <set>
  5. #include <vector>
  6. #include <queue>
  7. #include <cmath>
  8. #include <cstring>
  9. #include <cstdio>
  10. #include <ctime>
  11. #include <map>
  12. #include <bitset>
  13. #define mem(s,ch) memset(s,ch,sizeof(s))
  14. #define da cout<<da<<endl
  15. #define uoutput(a,i,l,r) for(int i=l;i<r;i++) if(i==l) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
  16. #define doutput(a,i,l,r) for(int i=r-1;i>=0;i--) if(i==r-1) cout<<a[i];else cout<<" "<<a[i];cout<<endl;
  17. const long long N=+;
  18. using namespace std;
  19. int n;
  20. int pic[][];
  21. pair<int,int>s[N];
  22. int main() {
  23. while(cin>>n){
  24. long long ct=;
  25. mem(pic,);
  26. for(int i=;i<n;i++){
  27. cin>>s[i].first>>s[i].second;
  28. pic[s[i].first+][s[i].second+]=;
  29. }
  30. for(int i=;i<n;i++)
  31. for(int j=;j<n;j++){
  32. if(i==j) continue;
  33. pair<int,int>t1,t2;
  34. int f1=,f2=;
  35. t1.first=s[i].second-s[j].second+s[i].first;
  36. t1.second=s[j].first-s[i].first+s[i].second;
  37. if(pic[t1.first+][t1.second+]==) f1=;
  38. t2.first=s[i].second-s[j].second+s[j].first;
  39. t2.second=s[j].first-s[i].first+s[j].second;
  40. if(pic[t2.first+][t2.second+]==) f2=;
  41. if(f1&&f2) {
  42. ct++;
  43. }
  44. }
  45. cout<<ct/<<endl;
  46. }
  47. return ;
  48. }

2017 Multi-University Training Contest - Team 2——HDU6045&&HDU6047&&HDU6055的更多相关文章

  1. 2017 Multi-University Training Contest - Team 9 1005&&HDU 6165 FFF at Valentine【强联通缩点+拓扑排序】

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. 2017 Multi-University Training Contest - Team 9 1004&&HDU 6164 Dying Light【数学+模拟】

    Dying Light Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  3. 2017 Multi-University Training Contest - Team 9 1003&&HDU 6163 CSGO【计算几何】

    CSGO Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  4. 2017 Multi-University Training Contest - Team 9 1002&&HDU 6162 Ch’s gift【树链部分+线段树】

    Ch’s gift Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  5. 2017 Multi-University Training Contest - Team 9 1001&&HDU 6161 Big binary tree【树形dp+hash】

    Big binary tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  6. 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】

    Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  7. 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】

    Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  8. 2017 Multi-University Training Contest - Team 1 1002&&HDU 6034 Balala Power!【字符串,贪心+排序】

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  9. 2017 Multi-University Training Contest - Team 1 1011&&HDU 6043 KazaQ's Socks【规律题,数学,水】

    KazaQ's Socks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

随机推荐

  1. linux 下面压缩,解压.rar文件以及rar,unrar实例

    http://www.rarlab.com/download.htm [root@bass src]# wget http://www.rarlab.com/rar/rarlinux-x64-5.4. ...

  2. jstl format date

    使用fmt函数需在jsp中引入 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" ...

  3. NFC读卡APP

    # 设计文档 ### 简介----------------------------- 这个APP的功能是使用手机的NFC读卡器功能,做到读取卡片支持M1卡和CPU卡. ### 功能列表-------- ...

  4. jquery清空textarea等输入框

    转载自:http://blog.csdn.net/dyllove98/article/details/8870307 完整示例:http://www.keleyi.com/keleyi/phtml/c ...

  5. ApplicationListener接口中的onApplicationEvent被调用两次解决方式

    Spring容器初始化完毕后,调用BeanPostProcessor这个类,这个类实现ApplicationListener接口,重写onApplicationEvent方法, 方法中就是我们自己要在 ...

  6. ES-PHP向ES批量添加文档报No alive nodes found in your cluster

    ES-PHP向ES批量添加文档报No alive nodes found in your cluster 2016年12月14日 12:31:40 阅读数:2668 参考文章phpcurl 请求Chu ...

  7. Trie树 + DFS - CSU 1457 Boggle

    Boggle Problem's Link: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1457 Mean: 给定n个串,有m个询问. 每个询问 ...

  8. php -- 魔术方法 之 设置属性:__set()

    属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __set():当用户在设置不存在或者权限不够的属性的时候会自动触发 没有设置__set($name,$v ...

  9. 【BZOJ】1061: [Noi2008]志愿者招募(费用流+数学)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 好神的一题! 学会了一种建模方式: 当方程组内的任意变量都在其中两个方程出现且一正一负,可以建 ...

  10. 百家搜索:在站点中加入Google、百度等搜索引擎

    来源:http://www.ido321.com/1143.html 看到一些站点上加入了各种搜索引擎. 如Google.百度.360.有道等.就有点好奇.这个怎么实现?研究了一各个搜索引擎怎么传送k ...