比赛链接: http://acm.uestc.edu.cn/contest.php?cid=230

A.Police And The Thief ---UESTC 1913

简单博弈,先假设在警察先走的情况下分析,小偷先走的结果在其基础上取反面即可。我是这样做的,随便假设小偷在一个点,在这个点的四周都是必败态(警察抓不到),然后一步可以到达必败态的点都是必胜态,一次推向远处,容易发现规律: 当abs(xp-xt)%2==abs(yp-yt)%2时都是必败态,否则是必败态,这是结果已经得出。

两个特殊情况:  1.开始时两人在同一点,算YES。

2.格子为n*1或1*m形式,必然可以抓到,算YES。

代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <string>
  7. #include <vector>
  8. #include <map>
  9. #include <set>
  10. #include <time.h>
  11. #include <queue>
  12. #include <cctype>
  13. #include <numeric>
  14. #include <cstdlib>
  15. #include <iomanip>
  16. #include <sstream>
  17. #define mod 1000000007
  18. #define INT 2147483647
  19. #define pi acos(-1.0)
  20. #define eps 1e-3
  21. #define lll __int64
  22. #define ll long long
  23. using namespace std;
  24. #define N 200005
  25.  
  26. int main()
  27. {
  28. int t,i;
  29. int n,m;
  30. int xp,yp,xt,yt;
  31. int flag;
  32. char ss[];
  33. scanf("%d",&t);
  34. while(t--)
  35. {
  36. flag = ;
  37. scanf("%d%d",&n,&m);
  38. scanf("%d%d%d%d",&xp,&yp,&xt,&yt);
  39. scanf("%s",ss);
  40. if((n == || m == )||(xp == xt && yp == yt))
  41. {
  42. cout<<"YES\n";
  43. continue;
  44. }
  45. int ka = abs(yp-yt);
  46. int kb = abs(xp-xt);
  47. if(ka% == kb%)
  48. {
  49. flag = ;
  50. }
  51.  
  52. if(ss[] == 'p')
  53. {
  54. if(flag)
  55. cout<<"YES"<<endl;
  56. else
  57. cout<<"NO"<<endl;
  58. }
  59. else
  60. {
  61. if(flag)
  62. cout<<"NO"<<endl;
  63. else
  64. cout<<"YES"<<endl;
  65. }
  66. }
  67. return ;
  68. }

B.Similar strings ---UESTC 1916

我的思路如下:从第一个字符串(后文称a)中第一个字符扫起,遇见一个字母(如'A'),如果没有标记,则标记为第二个字符串(后文称b)的该位字母,然后在循环里面扫一遍a,如果有等于这个字母的,而b对应的不相等,或者,不等于这个字母而b对应的又相等了,则tag = 0,说明不是,否则就是。这里最多26个字母,虽然是二重循环,但是不会超时。

代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <string>
  7. #include <vector>
  8. #include <map>
  9. #include <set>
  10. #include <time.h>
  11. #include <queue>
  12. #include <cctype>
  13. #include <numeric>
  14. #include <cstdlib>
  15. #include <iomanip>
  16. #include <sstream>
  17. #define mod 1000000007
  18. #define INT 2147483647
  19. #define pi acos(-1.0)
  20. #define eps 1e-3
  21. #define lll __int64
  22. #define ll long long
  23. using namespace std;
  24. #define N 200005
  25.  
  26. char flag[];
  27.  
  28. string tostring(char a)
  29. {
  30. string tmp = "";
  31. tmp +=a;
  32. return tmp;
  33. }
  34.  
  35. int main()
  36. {
  37. string aa,bb;
  38. int t,i;
  39. scanf("%d",&t);
  40. while(t--)
  41. {
  42. memset(flag,,sizeof(flag));
  43. cin>>aa;
  44. cin>>bb;
  45. int j;
  46. if(aa.length()!=bb.length())
  47. {
  48. cout<<"NO"<<endl;
  49. continue;
  50. }
  51. int tag = ;
  52. for(i=;i<aa.length();i++)
  53. {
  54. if(!flag[aa[i]-'A'])
  55. {
  56. flag[aa[i]-'A'] = bb[i];
  57. for(j = i+;j<aa.length();j++)
  58. {
  59. if(aa[i] == aa[j])
  60. {
  61. if(bb[i] != bb[j])
  62. {
  63. tag = ;
  64. break;
  65. }
  66. }
  67. else
  68. {
  69. if(bb[i] == bb[j])
  70. {
  71. tag = ;
  72. break;
  73. }
  74. }
  75. }
  76. }
  77. }
  78.  
  79. if(tag)
  80. cout<<"YES\n";
  81. else
  82. cout<<"NO"<<endl;
  83. }
  84. return ;
  85. }

C.The Game of Little P ---UESTC 1915

简单推公式题,公式很简单: ans = m*(m+1)*(2*m+1)/6 * n/(m+1) + modi*(modi+1)*(2*modi+1)/6 .  【modi = n%(m+1)】 难就难在计算出这个结果,又因为有取模的性质:(A * B) mod C = ((A mod C) * (B mod C)) mod C, 但是除法并不满足,所以要看m*(m+1)*(2*m+1)这个里面有没有可以被6整除的一个或两个数,先把6除掉,然后再用取模的性质解决。

代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <string>
  7. #include <vector>
  8. #include <map>
  9. #include <set>
  10. #include <time.h>
  11. #include <queue>
  12. #include <cctype>
  13. #include <numeric>
  14. #include <cstdlib>
  15. #include <iomanip>
  16. #include <sstream>
  17. #define mod 1000000007
  18. #define INT 2147483647
  19. #define pi acos(-1.0)
  20. #define eps 1e-3
  21. #define lll __int64
  22. #define ll long long
  23. using namespace std;
  24. #define Mod 1000000007LL
  25.  
  26. long long calc(long long m)
  27. {
  28. long long ka,res;
  29. long long a = m*(m+);
  30. long long b = *m+;
  31. long long c = m*(*m+);
  32. long long d = (m+)*(*m+);
  33. if(m%==) //
  34. {
  35. ka = m/;
  36. ka = ((ka%Mod)*((m+)%Mod))%Mod;
  37. res = ((ka%Mod)*(b%Mod))%Mod;
  38. }
  39. else if((m+)%==) //
  40. {
  41. ka = (m+)/;
  42. ka%=Mod;
  43. res = ((m%Mod)*ka)%Mod;
  44. res = (res*(b%Mod))%Mod;
  45. }
  46. else if(b%==) //
  47. {
  48. b/=;
  49. res = ((a%Mod)*(b%Mod))%Mod;
  50. }
  51. else if(a%==) //deux
  52. {
  53. a/=;
  54. res = ((a%Mod)*(b%Mod))%Mod;
  55. }
  56. else if(c%==)
  57. {
  58. ka = c/;
  59. res = ((ka%Mod)*((m+)%Mod))%Mod;
  60. }
  61. else if(d%==)
  62. {
  63. ka = d/;
  64. res = ((ka%Mod)*(m%Mod))%Mod;
  65. }
  66. return res%Mod;
  67. }
  68.  
  69. int main()
  70. {
  71. long long int n,m;
  72. int modi,i;
  73. int t;
  74. scanf("%d",&t);
  75. while(t--)
  76. {
  77. long long res;
  78. scanf("%lld%lld",&n,&m);
  79. modi = n%(m+);
  80. res = calc(m);
  81. res = (res*(n/(m+)))%Mod;
  82. long long cas = calc(modi);
  83. long long ans = (res+cas)%Mod;
  84. cout<<ans<<endl;
  85. }
  86. return ;
  87. }

D.Trees ----UESTC 1918

这题开始没想通,后来看了别人的解法才知道原来是多么弱的题,用贪心就行了,因为最少也应该满足1 2 3...3 2 1形式,先做一个假设数组就是1 2 3...3 2 1,然后再使输入的tree数组减去assume数组,得出差异,取差出现最多的一些数让他们不动,其余的都得动,当然,如果差小于0,那更是必须得动,此时动的树的数目一定是最小的。

代码:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <string>
  7. #include <vector>
  8. #include <map>
  9. #include <set>
  10. #include <time.h>
  11. #include <queue>
  12. #include <cctype>
  13. #include <numeric>
  14. #include <cstdlib>
  15. #include <iomanip>
  16. #include <sstream>
  17. #define Mod 1000000007
  18. #define INT 2147483647
  19. #define pi acos(-1.0)
  20. #define eps 1e-3
  21. #define lll __int64
  22. #define ll long long
  23. using namespace std;
  24.  
  25. int tree[];
  26. int assume[];
  27. int dif[];
  28. int flag[];
  29.  
  30. int main()
  31. {
  32. int n,i,j;
  33. int t;
  34. scanf("%d",&t);
  35. while(t--)
  36. {
  37. memset(flag,,sizeof(flag));
  38. scanf("%d",&n);
  39. for(i=;i<=n;i++)
  40. {
  41. scanf("%d",&tree[i]);
  42. }
  43. int mid = (n+)/;
  44. for(i=;i<=mid;i++)
  45. {
  46. assume[i] = i;
  47. }
  48. for(i=mid+;i<=n;i++)
  49. {
  50. assume[i] = assume[n-i+];
  51. }
  52. int maxdif = -;
  53. int diftag;
  54. for(i=;i<=n;i++)
  55. {
  56. dif[i] = tree[i]-assume[i];
  57. if(dif[i]>=)
  58. {
  59. flag[dif[i]]++;
  60. if(flag[dif[i]]>maxdif)
  61. {
  62. maxdif = flag[dif[i]];
  63. diftag = dif[i];
  64. }
  65. }
  66. }
  67. int cnt = ;
  68. for(i=;i<=n;i++)
  69. {
  70. if(dif[i]!=diftag)
  71. {
  72. cnt++;
  73. }
  74. }
  75. cout<<cnt<<endl;
  76. }
  77. return ;
  78. }

其余的还没做出来,等我后面更新。。有错误欢迎指正。

UESTC-第五届ACM趣味程序设计竞赛第四场(正式赛)--不完全解题报告的更多相关文章

  1. 电子科技大学第八届ACM趣味程序设计竞赛第四场(正式赛)题解

    A. Picking&Dancing 有一列n个石子,两人交替取石子,每次只能取连续的两个,取走后,剩下的石子仍然排成1列.问最后剩下的石子数量是奇数还是偶数. 读懂题意就没什么好说的. #i ...

  2. 第七届ACM趣味程序设计竞赛第四场(正式赛) 题解

    Final Pan's prime numbers 题目连接: http://acm.uestc.edu.cn/#/problem/show/1272 题意 给你n,要求你在[4,n]范围内找到一个最 ...

  3. CDOJ 第七届ACM趣味程序设计竞赛第三场(正式赛) 题解

    宝贵资源 题目连接: http://acm.uestc.edu.cn/#/problem/show/1265 题意 平面上给n个点(n<=1000),要求找一个面积最小的正方形,将所有的点都囊括 ...

  4. angry_birds_again_and_again(2014年山东省第五届ACM大学生程序设计竞赛A题)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2877 题目描述 The problems ca ...

  5. 电子科技大学第九届ACM趣味程序设计竞赛(热身赛)题解

    比赛地址:http://acm.uestc.edu.cn/#/contest/show/191 A题 小羽涂色 题意: 在x轴的正半轴上,问你是否存在一段区间[L,R]其中包含r个奇数和g个偶数. 分 ...

  6. “浪潮杯”山东省第五届ACM大学生程序设计竞赛(总结贴)

    第一次參加省赛有点小激动,尽管是作为打星队參赛,但心情却是上下起伏. 5月9号晚上11点多到威海,有点略冷.可是空气比淄博好多了,大家到了旅馆的时候都非常晚了,抱怨了一下三星级的酒店的待遇,喝杯咖啡早 ...

  7. 2014年山东省第五届ACM大学生程序设计竞赛F题:Full Binary Tree

    题目描述 In computer science, a binary tree is a tree data structure in which each node has at most two ...

  8. ACM学习历程—NPU1086 随机数 2015年陕西省程序设计竞赛网络预赛(正式赛)C题 (计数排序 || set容器)

    Description 开学了,ACM队的边老板想在学校中请一些妹子一起做一项问卷调查,调查妹子们对ACM的了解情况,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100), ...

  9. ACM学习历程—NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推)

    Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m. ...

随机推荐

  1. 【MVC学习笔记01】初窥奥秘

    前言 最近工作落实了,是我非常喜欢的无线前端,会接触很多新东西啦,需要努力才行.因为会用到backbone,所以要学习MVC啦. MVC(模型-视图-控制器),这种模式最早被用于构建桌面程序和服务器端 ...

  2. go语言 类型:字符串

    示例 package main import ( "fmt" ) func main() { var str1 string // 声明一个字符串变量 str1 = "H ...

  3. Weinre调试移动端页面

    Weinre是什么 如果我们做的是Cordova(phonegap)或其他hybird应用,当使用到原生功能时候(类似原生请求数据或页面切换时),没办法在PC chrome浏览器调试页面,一旦页面在手 ...

  4. 使用js实现带有停顿效果的图片滚动(按钮控制)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 学习zepto.js(原型方法)[2]

    接着昨天的来,继续说原型方法,昨天的传送阵(昨天出了点小意外,博文经过WP手机的UC浏览器进行编辑后标签就露出来了- -,现已修复); $.grep(): 作用与Array.filter类似(其实就是 ...

  6. ArcGIS Engine环境下创建自定义的ArcToolbox Geoprocessing工具

    在上一篇日志中介绍了自己通过几何的方法合并断开的线要素的ArcGIS插件式的应用程序.但是后来考虑到插件式的程序的配置和使用比较繁琐,也没有比较好的错误处理机制,于是我就把之前的程序封装成一个类似于A ...

  7. ZeroMq安装包的生成【ubuntu10】

    生成方法添加源sudo add-apt-repository ppa:chris-lea/zeromqsudo add-apt-repository ppa:chris-lea/libpgmsudo ...

  8. OC笔记

    self的概念:指向了当前对象(方法的调用者) self的用途 可以利用  self -> 成员变量名  访问当前对象内部的成员变量 [self 方法名];  调用其他对象方法或者类方法 所有继 ...

  9. iOS tableView 静态单元格的实现

    本文转自:http://home.cnblogs.com/u/wendingding/ iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一 ...

  10. Struts

    Struts是基于MVC的框架,它进一步的对MVC进行了封装. MVC 概念 MVC全名是Model View Controller,是模型(model)—视图(view)—控制器(controlle ...