2019西安多校联训 Day1
试题链接:http://www.accoders.com/contest.php?cid=1893 考试密码请私信;
T1
明明就是O(n)的模拟,强行打成二分QAQ
思路:判断收尾是否为1或n如果不是自己往上添加山峰,高度是
最接近的山峰的高度+两者之间的差值打完跑一遍即可,大水题.
#include <bits/stdc++.h>
using namespace std;
int a[][];
int n,m,maxx,ans;
bool ac,wa;
int ef(){
for(register int i=;i<=m;i++){
if(ac==false&&i==) continue;
if(wa==false&&i==m) continue;
ans=max(maxx,max(ans,((a[i+][]-a[i][])-abs(a[i][]-a[i+][]))/+max(a[i][],a[i+][])));
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
for(register int i=;i<=m;i++){
scanf("%d%d",&a[i][],&a[i][]);
if(i==&&a[i][]!=){a[][]=;a[][]=(a[][]+a[][]-);ac=;maxx=max(a[][],maxx);}
maxx=max(maxx,a[i][]);
}
if(a[m][]!=n){wa=;a[m+][]=n;a[m+][]=(n-a[m][]+a[m][]);maxx=max(a[m+][],maxx);}
for(register int i=;i<=m;i++){
if(ac==false&&i==) continue;
if(wa==false&&i==m) continue;
int midd=a[i+][]-a[i][];
if(abs(a[i+][]-a[i][])>midd){printf("IMPOSSIBLE");return ;}
}
cout<<ef();
return ;
}
旅行日记
T2
本题难度中上,思路不太好想
zkc大佬思路:将所有棋子点存储好,用每一个棋子遍历所有
的打击点,存储所有点共有的打击点,然后复制一张图以剩下的攻击
方式消除"o"和"x",若场面上还有"x"则为"NO",若无则为"YES",然
干完了这事后我们以所有打击方式来打击2*n-1那张图,然后输出即
可
事实证明,暴力出奇迹,打表出省一(这么暴力谁想得到啊QAQ)
#include <bits/stdc++.h>
using namespace std;
int n,qwq,lala;
char a[][];
char heiheihei[][];
int dis[][];
int xx[][];
char ans[][];
string s;
bool check3(int px,int py){
int cnt=;
for(register int i=;i<=qwq;i++){
int nx=dis[i][]+px;
int ny=dis[i][]+py;
if(nx>=&&nx<=n&&ny>=&&ny<=n)
if(a[nx][ny]=='x'){
cnt++;
if(cnt==qwq) return false;
}
}
return true;
}
bool check2(){
for(register int i=;i<=n;i++)
for(register int j=;j<=n;j++){
if(heiheihei[i][j]=='x') return false;
}
return true;
}
bool check1(int px,int py){
for(register int i=;i<=qwq;i++){
int nx=dis[i][]+px;
int ny=dis[i][]+py;
if(nx>=&&nx<=n&&ny>=&&ny<=n) if(a[nx][ny]=='.') return false;
}
return true;
}
int main(){
scanf("%d",&n);
for(register int i=;i<=n;i++){
cin>>s;
for(register int j=;j<n;j++){
a[i][j+]=s[j];
if(a[i][j+]=='o') dis[++qwq][]=i,dis[qwq][]=j+;
}
}
for(register int k=;k<=qwq;k++){
for(register int i=;i<=n;i++)
for(register int j=;j<=n;j++){
if((a[i][j]=='x')||(a[i][j]=='o'&&i!=dis[k][]&&j!=dis[k][])){
int px=i-dis[k][],py=j-dis[k][];
if(check1(px,py)) xx[++lala][]=px,xx[lala][]=py;
}
}
}
for(register int i=;i<=n;i++)
for(register int j=;j<=n;j++){
heiheihei[i][j]=a[i][j];
}
for(register int i=;i<=qwq;i++){
heiheihei[dis[i][]][dis[i][]]='.';
for(register int j=;j<=lala;j++){
heiheihei[dis[i][]+xx[j][]][dis[i][]+xx[j][]]='.';
}
}
if(check2()) printf("YES\n");
else{printf("NO\n");return ;}
memset(xx,,sizeof(xx));
lala=;
for(register int k=;k<=qwq;k++){
for(register int i=;i<=n;i++)
for(register int j=;j<=n;j++){
if(a[i][j]=='.'){
int px=i-dis[k][],py=j-dis[k][];
if(check3(px,py)) xx[++lala][]=px,xx[lala][]=py;
}
}
}
memset(ans,'x',sizeof(ans));
ans[n][n]='o';
for(register int i=;i<=lala;i++){
ans[n+xx[i][]][n+xx[i][]]='.';
}
for(register int i=;i<=*n-;i++){
for(register int j=;j<=*n-;j++) cout<<ans[i][j];printf("\n");}
return ;
}
奇怪的棋
T3
本题找规律,难度中等,但记住要开long long,同时记住每算一个就%一下
思路:在k之后的点不能通往1,所以后面得点不能通往k前
因为k前的点按题意都必须通往1,所以k后的种类数即为(n-k)^(n-k),
在k前的点需要以奇异的算法来算,不难发现在k前的点只要构成循环
或者都指向返回1的点即可成立,所以得出结论在k前的种类数即为
(k-1)^k,最后将两者相乘取mod便可
#include <bits/stdc++.h>
using namespace std;
long long modd=1e9+;
long long x,y,ans;
long long n,m;
long long ksm(long long a,long long b,long long p){
long long ans=;
while(b){
if(b&) ans=(ans*a)%p;
a=(a*a)%p;
b/=;
}
return ans;
}
int main(){
scanf("%lld%lld",&n,&m);
if(n-m!=){
x=ksm((n-m)%modd,n-m,modd);
}
if(n-m==) x=;
y=ksm(m%modd,m-,modd);
ans=x*y%modd;
printf("%lld",ans);
return ;
}
小明的城堡
end;
2019西安多校联训 Day1的更多相关文章
- 2019西安多校联训 Day5
T1 光哥为了不让某初二奆佬恶心到我们而留下的火种 (貌似没这题平均分就100-了) 思路:就一横一竖让后就gztopa嘛 #include <bits/stdc++.h> using n ...
- 2019西安多校联训 Day4
T1 大水题!!难度简单,显然的贪心策略即可,but... 思路:首先我们按与i点作战后活下来的士兵排序,然后 若当前剩余兵力足够直接减掉战斗死亡人数,如果不够就加 够再打它,但是!我们在考完试观察测 ...
- 2019西安多校联训 Day3
试题链接:http://www.accoders.com/contest.php?cid=1895 考试密码请私信; 特别鸣谢:zkc奆佬帮助我优化本篇题解(语言表达方面) T1 显然二分求解的 ...
- 2019西安多校联训 Day2
试题链接:http://www.accoders.com/contest.php?cid=1894 考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...
- Contest1893 - 2019年6月多校联训b层测试1
传送门 密码:waxadyt T1 暴力 对于任意相邻的两个值 中间能到达的最大高度是固定的 加上头尾,判一下就好了 代码//感谢Th Au K #include<bits/stdc++.h&g ...
- 2019 牛客国庆集训day1 2019 点分治
题目链接:https://ac.nowcoder.com/acm/contest/1099/I 点分治,计算路径数的时候,先将每个点到根的距离模2019,计算的时候就可以O(n)求出数目,对于模201 ...
- 正睿 2019 省选附加赛 Day1 T1 考考试
比较奇怪的一个枚举题. 注意到10=2*5,所以10^k的二进制表示一定恰好在末尾有k个0. 考虑从小到大去填这个十进制数. 填的时候记录一下当前的二进制表示. 每次尝试去填0或者10^k. 如果要填 ...
- [DBSDFZOJ 多校联训] 就
就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...
- [DBSDFZOJ 多校联训] Password
Password password.in/.out 描述 你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s. 传说打开庙门的密码是这个字符串的一个子串 t,并且 t 既是 s 的前缀又是 s ...
随机推荐
- Android实现多个倒计时优化与源代码分析
由于之前有个项目需求是须要时时刻去更新UI倒计时,之前想到的,这简单嘛,用计时或者Handler就能够搞定,并且性能也不错,可是需求要ListView,什么,?大量的View都须要,那Handle处理 ...
- CSS和JS结合控制样式
CSS控制样式,毋庸置疑.但有时,仅靠CSS却很难控制好,比如说,页面在多种条件下进行不同的呈现:或者运行过程中,会发生变化,比如说,左侧的菜单栏收缩了,那么右侧的宽度就变大了. 就拿这个元素的wid ...
- 【Android】Android输入子系统【转】
本文转载自:https://www.cnblogs.com/lcw/p/3506110.html Linux输入子系统回顾 1:为什么要回顾linux输入子系统?这个问题后面自然就知道了 1.linu ...
- 4.2 Context-Free Grammars
4.2 Context-Free Grammars Grammars were introduced in Section 2.2 to systematically describe the syn ...
- bzoj4264
哈希 cf原题...没见过的话真想不出来 将邻接表排序哈希,判断是否相同,但是会漏掉两点相邻的情况,于是再把自己加入自己的邻接表,然后再哈希判断. #include<bits/stdc++.h& ...
- 19_传智播客iOS视频教程_类和对象
什么是类?什么是对象? 看的见.摸的着.拿过来就可以直接使用.例如报纸就是一个对象. 学生这个东西可不可以只是指一个?就只有那一个才是学生.不是的,学生是有很多个的.它是对一类人的统称.类是统称.所以 ...
- jQuery的each内部的break,continue
// break, continue在each等迭代器里都不可用 // return false = break // return true = continue function isClicke ...
- E20171121-sl
contrast n. 对比,对照; 差异; 对照物,对立面; [摄] 反差;
- unable to unroll loop 报错
unable to unroll loop, loop does not appear to terminate in a timely manner (1024 iterations) 原本代码 f ...
- Avito Code Challenge 2018 A~E
A. Antipalindrome 还以为是什么神dp结果就是分情况讨论啊 原串是一串一样的字符的话输出0,是回文串的话输出n-1,否则直接输出原串长度 #include<iostream> ...