1001,只要枚举区间即可。签到题,要注意的是输入0的话也是“TAT”。不过今天补题的时候却WA了好几次,觉得奇怪。原来出现在判断条件那里,x是一个int64类型的变量,在进行(x<65536*65536)的时候,后面的已经爆int了!因为如果写的是int类型他就默认是int类型的。所以要写成(ll)65536*65536或者直接4294967296,因为如果这个值是ll类型的,就自动用ll类型来保存了(另外要注意的是(ll)(65536*65536)也是错的!因为后面已经爆int了,再转成ll就没意义了)。看来写代码要小心再小心。不过我们昨天1A,也是因为一开始打表的时候已经把4294967296算出来了,不然如果让我直接敲的话,可能在这签到题上都会WA到死啊- -。。说明有时候运气也是ACM的一部分。- -!代码如下:

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll; char s[+]; int main()
{
while(scanf("%s",s)==)
{
int len = strlen(s);
if(len>) puts("TAT");
else
{
ll x = ;
for(int i=;s[i];i++) x = x * + s[i] - '';
if(x==) puts("TAT");
else if(x<) puts("");
else if(x>= && x<) puts("");
else if(x>= && x<) puts("");
else if(x>= && x<) puts("");
else if(x>= && x<) puts("");
else if(x>= && x<(ll)*) puts("");
else puts("TAT");
}
}
}

  1002,队友当时是二维dp做的,我自己当时也想了一个办法,代数式化简了半天得到了一个公式,虽然后来验证了一下好像是错的,不过可能是我自己推错了,下次有空再试试。主要是用到了2*1+3*2+4*3+...+n*(n-1)这样的形式求和,这样的式子可以拆成2*(2-1)+3*(3-1)+4*(4-1)+...+n*(n-1),然后拆开,前面是平方和公式,后面是等差数列公式,然后相减即可。顺便,平方和公式是:

    

但是看了一下题解,他的方法简直太吊了!对于一个数字在两头的情况,以在头为例,这个数字和它后面的这个数字,选择任意两个数字的情况下,只有两种比较关系(>或者<)那么这个位置的期望就是c[i]/2,同理的,在中间的时候,任选3个数只有6种可能性(3!),而中间大的情况只有两种,因此贡献是c[i]/3(可以这么理解,三个数考虑为123,那么可能性就是错排列的种数,而中间大的可能性就是3在中间的两种情况)。那么这题就做完了,另外需要特判n=1的情况。代码如下:

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll; int a[+]; int main()
{
int n;
while(scanf("%d",&n)==)
{
for(int i=;i<=n;i++) scanf("%d",a+i);
if(n==)
{
printf("%f\n",1.0*a[]);
}
else
{
double ans = ;
for(int i=;i<=n;i++)
{
if(i== || i==n) ans += a[i]/2.0;
else ans += a[i]/3.0;
}
printf("%f\n",ans);
}
}
}

  1003,博弈论。因为上一场的关系,去学了博弈论,结果这场就来这题,真是太巧了!直接1A了233(其实也是含有点运气成分的)。王和车的话,直接画出NP图即可找出规律。而皇后的话,有点像威佐夫博弈,先画出NP图,但是P点没有什么规律可寻,因此我们需要把P的坐标一个一个的写出来找规律,写出来以后豁然开朗!因为我们可以发现的是,这些坐标点都满足一个威佐夫博弈的奇异态的变化规律:每个数字都只出现一次,而且,每个坐标两点的差值是一个等差数列。这样就很好处理了!但是这不是威佐夫博弈的奇异态,不满足a[k]=[k*(sqrt(5.0)+1)/2],但是我们可以换一个方法,既然每个点都只出现一次,就可以近似O(n)的把这些点都放到一个set里面来判断这个数字是否使用过,每次都找出最小的一个没被使用过的数字,把它以及它的另一个同伴丢到另外一个装pair的set里面,这个set里面装的都是奇异态(也就是必败态),那么只要这么预处理以后,判断坐标是不是在这个set里面即可(至于如何找这个数的同伴,可以仔细考虑一下上面加粗红字的意义,也可以见代码仔细看看)。皇后的NP图如下:

然后我们来讲一下马的规律,因为马比较特殊,它的走法可能导致平局,因此我们还得找出平局点(这里还有个要注意的地方,如果我下一步可以走向必败或者走向平局,那么我的最优策略应当是走向平局)。马的NP图如下(!是平局点):

代码如下:

 #include <bits/stdc++.h>
using namespace std;
const int N = + ;
typedef long long ll;
typedef pair<int,int> pii; set<int> S;
set<pii> S2;
void init()
{
int now = ;
int diff = ;
S2.insert(pii(,));
S.insert();
for(;;)
{
int sz = S.size();
if(sz>) break;
if(S.find(now) == S.end())
{
int a = now;
int b = now + diff;
S2.insert(pii(a,b));
S.insert(a);
S.insert(b);
//printf("insert !! %d %d !!\n",a,b);
now ++;
diff ++;
}
else now ++;
}
} int main()
{
init();
/*int cnt = 0;
for(set<pii>::iterator it=S2.begin();;it++)
{
cnt ++;
if(cnt > 10 ) break;
printf("%d %d\n",(*it).first,(*it).second);
}*/
int T;
scanf("%d",&T);
while(T--)
{
int op ,n,m;
scanf("%d%d%d",&op,&n,&m);
if(op==)
{
if(n% && m %) puts("G");
else puts("B");
}
else if(op==)
{
if(n==m) puts("G");
else puts("B");
}
else if(op==)
{
if(n>m) swap(n,m);
if(S2.find(pii(n,m))==S2.end())
{
puts("B");
}
else puts("G");
}
else
{
if(n==m && n%==)
{
puts("G");
}
else
{
if(n>m) swap(n,m);
if(m%== && m-n==) puts("B");
else puts("D");
}
}
} }

——————————————————————伟大的博弈论的分界线——————————————————————————————

  偶然间看到别人这题的博客,关于皇后的方法,似乎就是完完全全的威佐夫博弈。= =!原型的话,令k=两数之差,那么有a[k]=[x*k],其中x等于(sqrt(5.0)+1)/2.0;而在这里满足的关系是a[k]*x=b[k]!也就是说,大的数是小的数的x倍!天哪,,简直太奥义了!!那么代码就好写多了!如下:

 #include <bits/stdc++.h>
using namespace std;
const int N = + ;
typedef long long ll;
typedef pair<int,int> pii; set<int> S;
set<pii> S2;
void init()
{
int now = ;
int diff = ;
S2.insert(pii(,));
S.insert();
for(;;)
{
int sz = S.size();
if(sz>) break;
if(S.find(now) == S.end())
{
int a = now;
int b = now + diff;
S2.insert(pii(a,b));
S.insert(a);
S.insert(b);
//printf("insert !! %d %d !!\n",a,b);
now ++;
diff ++;
}
else now ++;
}
} int main()
{
//init();
/*int cnt = 0;
for(set<pii>::iterator it=S2.begin();;it++)
{
cnt ++;
if(cnt > 10 ) break;
printf("%d %d\n",(*it).first,(*it).second);
}*/
int T;
scanf("%d",&T);
while(T--)
{
int op ,n,m;
scanf("%d%d%d",&op,&n,&m);
if(op==)
{
if(n% && m %) puts("G");
else puts("B");
}
else if(op==)
{
if(n==m) puts("G");
else puts("B");
}
else if(op==)
{
if(n>m) swap(n,m);
/*if(S2.find(pii(n,m))==S2.end())
{
puts("B");
}
else puts("G");*/
double x = (sqrt(5.0)+1.0)/2.0;
if((int)(n*x)==m) puts("G");
else puts("B");
}
else
{
if(n==m && n%==)
{
puts("G");
}
else
{
if(n>m) swap(n,m);
if(m%== && m-n==) puts("B");
else puts("D");
}
}
} }

奥义的威佐夫博弈

——————————————————————伟大的博弈论的分界线——————————————————————————————

  1010,这题完全就是高数的知识啊,然而我们太弱了,无法解出= =题解给的方法还是很吊的:

  1011,这题我们一开始卡了很久,,简直弱到爆炸- -其实很简单,因为曼哈顿距离总共就没几种,因此用一个数组来记录各种曼哈顿距离是否出现过,那么枚举在O(n^2)的过程中一旦出现重复就可以退出了;而由于抽屉原理,一旦枚举数量达到2*M必定会有重复的距离出现,那么最多的枚举数量也不过2*M。现场写的代码如下:

 #include<bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef pair<int,int> PII;
typedef pair<long long ,long long> PLL;
typedef long long ll;
const double eps = 1e-;
const int N = (int)2e5 + ; bool used[N];
PII p[N];
int main(){
int T;
cin >> T;
while(T --){
int n,m;
scanf("%d%d",&n,&m);
for(int i = ; i < n ; i ++){
scanf("%d%d",&p[i].F,&p[i].S);
}
int cnt = ;
bool f = false;
memset(used,false,sizeof(used));
for(int i = ; i < n && !f; i ++){
for(int j = i + ; j < n && !f ; j ++){
int d = abs(p[i].F - p[j].F) + abs(p[i].S-p[j].S);
if(used[d]) f = true;
used[d] = true; cnt ++;
if(cnt > N) break;
}
}
if(f) puts("YES");
else puts("NO");
}
return ;
}

2016 Multi-University Training Contest 3 部分题解的更多相关文章

  1. 2016 Al-Baath University Training Camp Contest-1

    2016 Al-Baath University Training Camp Contest-1 A题:http://codeforces.com/gym/101028/problem/A 题意:比赛 ...

  2. 2016 Multi-University Training Contest 1 部分题解

    第一场多校,出了一题,,没有挂零还算欣慰. 1001,求最小生成树和,确定了最小生成树后任意两点间的距离的最小数学期望.当时就有点矛盾,为什么是求最小的数学期望以及为什么题目给了每条边都不相等的条件. ...

  3. 2016 Multi-University Training Contest 4 部分题解

    1001,官方题解是直接dp,首先dp[i]表示到i位置的种类数,它首先应该等于dp[i-1],(假设m是B串的长度)同时,如果(i-m+1)这个位置开始到i这个位置的这一串是和B串相同的,那么dp[ ...

  4. 2016 Multi-University Training Contest 2 部分题解

    1009,直接贪心,只要让后面的尽量小,第一位和第二位尽量大即可. 1011,直接统计奇数的字母的个数,然后用偶数的个数平均分配到它们上面即可.代码如下: #include <stdio.h&g ...

  5. 2016 Al-Baath University Training Camp Contest-1 E

    Description ACM-SCPC-2017 is approaching every university is trying to do its best in order to be th ...

  6. 2016 Al-Baath University Training Camp Contest-1 F

    Description Zaid has two words, a of length between 4 and 1000 and b of length 4 exactly. The word a ...

  7. 2016 Al-Baath University Training Camp Contest-1 A

    Description Tourist likes competitive programming and he has his own Codeforces account. He particip ...

  8. 2016 Al-Baath University Training Camp Contest-1 I. March Rain —— 二分

    题目链接:http://codeforces.com/problemset/gymProblem/101028/I I. March Rain time limit per test 2 second ...

  9. 2018 Multi-University Training Contest 3(部分题解)

    Problem F. Grab The Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Ja ...

随机推荐

  1. WebStorm 2017 最新激活方式

    刚开始使用WebStorm注册时,在打开的License Activation窗口中选择“activation code”,在输入框输入下面的注册码 43B4A73YYJ-eyJsaWNlbnNlSW ...

  2. LeetCode 腾讯精选50题--子集

    根据题意,找到几何中的所有子集,说实话子集是没有什么头绪的,因为如果采用遍历的方法,稍有遗漏不说,代码的嵌套循环层数随着数组大小的增加而增加,想了很久没有头绪后就去看了看评论,然后就被点破了解题的关键 ...

  3. 基于Hadoop生态SparkStreaming的大数据实时流处理平台的搭建

    随着公司业务发展,对大数据的获取和实时处理的要求就会越来越高,日志处理.用户行为分析.场景业务分析等等,传统的写日志方式根本满足不了业务的实时处理需求,所以本人准备开始着手改造原系统中的数据处理方式, ...

  4. js重点——作用域——内部原理(二)

    本篇是深入分析和理解作用域的第一篇——内部原理和工作模型. 我们知道作用域是变量,对象,函数可访问的一个范围.这说明了我们需要一套良好的规则来存储变量,之后方便查找.所以我们首先要理解的是在哪里而且怎 ...

  5. 【转】axios用post提交的数据格式

    本文链接:https://blog.csdn.net/wopelo/article/details/78783442vue框架推荐使用axios来发送ajax请求,之前我还写过一篇博客来讲解如何在vu ...

  6. HTTP中GET,POST和PUT的区别

    一.HTTP中定义了以下几种请求方法: 1.GET:2.POST:3.PUT:4.DELETE;5.HEAD:6.TRACE:7.OPTIONS: 二.各个方法介绍: 1.GET方法:对这个资源的查操 ...

  7. Django:forms局部函数、cookie、sesion、auth模块

    一.forms组件 二.cookie和session组件 三.auth组件 一.forms组件 1.校验字段功能 针对一个实例:注册用户讲解 模型:models class UserInfo(mode ...

  8. CSS 中用户自定义字体 @font-face

    @font-face 允许网页中使用自定义的字体,这些自定义的字体被放置在服务器上,从而让网页摆脱对访问者计算机上字体环境的依赖. 简单的说,有了@font-face,只需将字体上传到服务器端,无论访 ...

  9. Python---安装路径查看

    python是解释型脚本语言,在执行时,逐句解释执行,不需要进行预编译.但需要有自身的Python解释器.  所以在执行Python代码时,需要指定python解释器.  指定解释器方法: 在文件开头 ...

  10. 【CodeForces】915 G. Coprime Arrays 莫比乌斯反演,前缀和,差分

    Coprime Arrays CodeForces - 915G Let's call an array a of size n coprime iff gcd(a1, a2, ..., *a**n) ...