比赛链接: 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。

代码:

                        #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <time.h>
#include <queue>
#include <cctype>
#include <numeric>
#include <cstdlib>
#include <iomanip>
#include <sstream>
#define mod 1000000007
#define INT 2147483647
#define pi acos(-1.0)
#define eps 1e-3
#define lll __int64
#define ll long long
using namespace std;
#define N 200005 int main()
{
int t,i;
int n,m;
int xp,yp,xt,yt;
int flag;
char ss[];
scanf("%d",&t);
while(t--)
{
flag = ;
scanf("%d%d",&n,&m);
scanf("%d%d%d%d",&xp,&yp,&xt,&yt);
scanf("%s",ss);
if((n == || m == )||(xp == xt && yp == yt))
{
cout<<"YES\n";
continue;
}
int ka = abs(yp-yt);
int kb = abs(xp-xt);
if(ka% == kb%)
{
flag = ;
} if(ss[] == 'p')
{
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
else
{
if(flag)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
}
return ;
}

B.Similar strings ---UESTC 1916

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

代码:

                        #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <time.h>
#include <queue>
#include <cctype>
#include <numeric>
#include <cstdlib>
#include <iomanip>
#include <sstream>
#define mod 1000000007
#define INT 2147483647
#define pi acos(-1.0)
#define eps 1e-3
#define lll __int64
#define ll long long
using namespace std;
#define N 200005 char flag[]; string tostring(char a)
{
string tmp = "";
tmp +=a;
return tmp;
} int main()
{
string aa,bb;
int t,i;
scanf("%d",&t);
while(t--)
{
memset(flag,,sizeof(flag));
cin>>aa;
cin>>bb;
int j;
if(aa.length()!=bb.length())
{
cout<<"NO"<<endl;
continue;
}
int tag = ;
for(i=;i<aa.length();i++)
{
if(!flag[aa[i]-'A'])
{
flag[aa[i]-'A'] = bb[i];
for(j = i+;j<aa.length();j++)
{
if(aa[i] == aa[j])
{
if(bb[i] != bb[j])
{
tag = ;
break;
}
}
else
{
if(bb[i] == bb[j])
{
tag = ;
break;
}
}
}
}
} if(tag)
cout<<"YES\n";
else
cout<<"NO"<<endl;
}
return ;
}

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除掉,然后再用取模的性质解决。

代码:

                        #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <time.h>
#include <queue>
#include <cctype>
#include <numeric>
#include <cstdlib>
#include <iomanip>
#include <sstream>
#define mod 1000000007
#define INT 2147483647
#define pi acos(-1.0)
#define eps 1e-3
#define lll __int64
#define ll long long
using namespace std;
#define Mod 1000000007LL long long calc(long long m)
{
long long ka,res;
long long a = m*(m+);
long long b = *m+;
long long c = m*(*m+);
long long d = (m+)*(*m+);
if(m%==) //
{
ka = m/;
ka = ((ka%Mod)*((m+)%Mod))%Mod;
res = ((ka%Mod)*(b%Mod))%Mod;
}
else if((m+)%==) //
{
ka = (m+)/;
ka%=Mod;
res = ((m%Mod)*ka)%Mod;
res = (res*(b%Mod))%Mod;
}
else if(b%==) //
{
b/=;
res = ((a%Mod)*(b%Mod))%Mod;
}
else if(a%==) //deux
{
a/=;
res = ((a%Mod)*(b%Mod))%Mod;
}
else if(c%==)
{
ka = c/;
res = ((ka%Mod)*((m+)%Mod))%Mod;
}
else if(d%==)
{
ka = d/;
res = ((ka%Mod)*(m%Mod))%Mod;
}
return res%Mod;
} int main()
{
long long int n,m;
int modi,i;
int t;
scanf("%d",&t);
while(t--)
{
long long res;
scanf("%lld%lld",&n,&m);
modi = n%(m+);
res = calc(m);
res = (res*(n/(m+)))%Mod;
long long cas = calc(modi);
long long ans = (res+cas)%Mod;
cout<<ans<<endl;
}
return ;
}

D.Trees ----UESTC 1918

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

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <time.h>
#include <queue>
#include <cctype>
#include <numeric>
#include <cstdlib>
#include <iomanip>
#include <sstream>
#define Mod 1000000007
#define INT 2147483647
#define pi acos(-1.0)
#define eps 1e-3
#define lll __int64
#define ll long long
using namespace std; int tree[];
int assume[];
int dif[];
int flag[]; int main()
{
int n,i,j;
int t;
scanf("%d",&t);
while(t--)
{
memset(flag,,sizeof(flag));
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d",&tree[i]);
}
int mid = (n+)/;
for(i=;i<=mid;i++)
{
assume[i] = i;
}
for(i=mid+;i<=n;i++)
{
assume[i] = assume[n-i+];
}
int maxdif = -;
int diftag;
for(i=;i<=n;i++)
{
dif[i] = tree[i]-assume[i];
if(dif[i]>=)
{
flag[dif[i]]++;
if(flag[dif[i]]>maxdif)
{
maxdif = flag[dif[i]];
diftag = dif[i];
}
}
}
int cnt = ;
for(i=;i<=n;i++)
{
if(dif[i]!=diftag)
{
cnt++;
}
}
cout<<cnt<<endl;
}
return ;
}

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

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. Ratatype - 在线打字教程,提高打字速度

    Ratatype 是一个在线的打字教程网站,帮助人们提高键盘输入速度.开始掌握你的技能,挑战你的朋友或得到一个打字的证书.如果打字慢会浪费你宝贵的时间.如果你的打字速度提高30%,您可以每天节省20分 ...

  2. TortoiseSVN使用教程

    一.下载安装文件: 图1.1 安装顺序:1.VisualSVN-Server-2.6.5.msi:2.TortoiseSVN-1.8.2.24708-win32-svn-1.8.3.msi:3.Lan ...

  3. sharepoint2010升级到sharepoint2013的升级步骤和过程

  4. 【Leafletjs】4.L.Map 中文API

    L.Map API各种类中的核心部分,用来在页面中创建地图并操纵地图. 使用 example // initialize the map on the "map" div with ...

  5. webView 显示一段 html 代码

    1.布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...

  6. commandline (命令行)登录mysql

    mysql登录在命令行登录的时候是通过mysql的里面的程序的录的 其登录格式有两种:(在oracle上看到的是列出这两种,不要既有全参数名又有缩写参数名.) 1.全参数名登录释例 mysql --h ...

  7. 访客至上的Web、移动可用性设计--指导原则

    文章出自:听云博客 关于可用性设计,之前写过一个“纸上谈兵”版本的,那篇帖子主要是根据A/B test的方式来进行的. 但是最近找了本Steve krug写的Don't make me think,我 ...

  8. iOS 跳转到系统的设置界面

    跳到健康设置   上网找了一下  你会发现很难找到.代码如下  不信你试试 . NSURL *url = [NSURL URLWithString:@"prefs:root=Privacy& ...

  9. iOS开发之邓白氏编码申请流程

    要申请企业证书,必须先申请邓白氏编码,在苹果网站有一个免费申请邓白氏编码的链接:https://developer.apple.com/program/enroll/dunsLookupForm.ac ...

  10. 【原】Github系列之一:一起做仿天气类应用中的实时模糊效果LiveBlur

    从本文开始,我将专门开辟一个Github Code系列,开源自己写的一部分有意思而且实用的demo,共同学习.以前都发布在git OSChina上,后面有空会陆陆续续整理到Github上.OSChin ...