codeforces Gym 100971 A、B、C、F、G、K、L
A题 直接把问号全部变为陆地如果所有陆地连通 那么再逐个把刚才变成陆地的问号变为水如果依旧连通有多种解
为什么我的代码跑不过去,和网上的题解思路一模一样!!??
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define MAX_N 55
using namespace std;
char map[MAX_N][MAX_N];
int n,m;
int cnt_s;
int cnt_p;
int cnt;
int dx[]={,,-,};
int dy[]={,,,-};
bool vis[MAX_N][MAX_N];
void dfs(int sx,int sy)
{
vis[sx][sy]=true;
for(int i=;i<;i++)
{
int tx=sx+dx[i];
int ty=sy+dy[i];
if(tx>=&&tx<n&&ty>=&&ty<m&&map[tx][ty]!='#'&&!vis[tx][ty])
{
cnt++;
if(map[tx][ty]=='?')
map[tx][ty]='*';//标记走过的?
vis[tx][ty]=true;
dfs(tx,ty);
}
}
return ;
}
int main(void)
{
while(scanf("%d%d",&n,&m)==)
{
cnt_p=;
int sx,sy;
for(int i=;i<n;i++)
scanf("%s",map[i]);
memset(vis,false,sizeof(vis));
int k=;//k块陆地
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(map[i][j]=='.'&&!vis[i][j])
{
k++;
cnt=;
dfs(i,j);
sx=i;
sy=j;
}
}
}
if(k>)
{
printf("Impossible\n");
continue;
}
cnt_s=cnt;
bool ok=false;
for(int i=;i<n&&!ok;i++)
{
for(int j=;j<m&&!ok;j++)
{
cnt=;
if(map[i][j]=='*')
{
memset(vis,false,sizeof(vis));
map[i][j]='#';
dfs(sx,sy);
if(cnt==cnt_s-)
ok=true;
map[i][j]='.';
}
}
}
if(ok)
printf("Ambiguous\n");
else
{
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(map[i][j]=='.')
printf(".");
else
printf("#");
}
printf("\n");
}
}
}
return ;
}
B题 判断有几个点在原位置上 偶数个直接两两互换,奇数个前三个互换 后面两两互换,特判只有一个的时候
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn= ;
const int maxm= 1e4+;
const int inf = 0x3f3f3f3f;
typedef long long ll;
int a[maxn],b[maxn];
int n;
int main()
{
while(cin>>n)
{
int cnt=;
for(int i=;i<=n;i++)
{
cin>>a[i];
if(a[i]==i)
b[cnt++]=a[i];
}
if(cnt==)
cout<<<<endl;
else if(cnt==)
{
cout<<cnt<<endl;
if(b[]-==)
cout<<b[]<<" "<<b[]+<<endl;
else
cout<<b[]<<" "<<b[]-<<endl;
}
else
if(cnt%==)
{
cout<<cnt/<<endl;
for(int i=;i<cnt;i=i+)
cout<<b[i]<<" "<<b[i-]<<endl;
}
else
{
cout<<(cnt-)/+<<endl;
for(int i=;i<=;i++)
cout<<b[i]<<" "<<b[]<<endl;
for(int i=;i<cnt;i=i+)
{
cout<<b[i]<<" "<<b[i+]<<endl;
}
}
}
}
C题 大于最大差小于最小和
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn= ;
const int maxm= 1e4+;
const int inf = 0x3f3f3f3f;
typedef long long ll;
int a[maxn],b[maxn];
int n;
int main()
{
while(cin>>n)
{
for(int i=;i<=n;i++)
cin>>a[i];
sort(a+,a+n+);
int x=a[]+a[];
int y=a[n]-a[];
if(x-y>=)
cout<<"YES"<<endl<<y+<<endl;
else
cout<<"NO"<<endl;
}
}
F题 直接列出方程来 解二元一次方程 精度问题真的头疼。。为什么我的代码就不对 贴一个大佬二分写的
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn = 2e5+;
const int maxm = 1e4+;
const int inf = 0x3f3f3f3f;
const double epx = 1e-;
typedef long long ll;
int n;
int xx1,yy1,xx2,yy2;
int vxx1,vyy1,vxx2,vyy2;
double solve(double t)
{
int A=xx1-xx2;
int A1=vxx1-vxx2;
int B=yy1-yy2;
int B1=vyy1-vyy2;
return (A+A1*t)*(A+A1*t)+(B+B1*t)*(B+B1*t);
}
int main()
{
while(scanf("%d %d %d %d",&xx1,&yy1,&xx2,&yy2)!=EOF)
{
scanf("%d %d %d %d",&vxx1,&vyy1,&vxx2,&vyy2);
double ans=;
double l=,r=1e6;
while(r-l>epx)
{
double mid=(l+r)/;
double midmid=(mid+r)/;
if(solve(mid)<=solve(midmid))
r=midmid;
else
l=mid;
}
ans=sqrt(solve((l+r)/));
printf("%.10f\n",ans);
}
}
G题 八种情况直接暴力模拟
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn= ;
const int maxm= 1e4+;
const int inf = 0x3f3f3f3f;
typedef long long ll;
int a[maxn],b[maxn];
int n,m;
int main()
{
while(cin>>n>>m)
{
int x,y;
int x1,y1;
cin>>x>>y>>x1>>y1;
int flag=;
if((x>n&&x>m)||(y>n&&y>m)||(x1>n&&x1>m)||(y1>n&&y1>m))
flag=;
else if((x+x1<=n&&max(y,y1)<=m)||(x+y1<=n&&max(x1,y)<=m)||(y+x1<=n&&max(x,y1)<=m)||(y+y1<=n&&max(x,x1)<=m)||(x+x1<=m&&max(y,y1)<=n)||(x+y1<=m&&max(x1,y)<=n)||(y+x1<=m&&max(x,y1)<=n)||(y+y1<=m&&max(x,x1)<=n))
flag=;
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
K题 回文串 两种情况两边开始比较第一次遇到不同的 删右边或者删左边 删完之后若还有不同行不通 一边成立就YES 两边都不成立NO
我想的有点多写麻烦了 贴的队友的代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=1e6+;
char a[N];
int main()
{
while(~scanf("%s",a))
{
int len=strlen(a);
int flag1=,flag2=;
int num=,num1=,num2=;
for(int i=; i<len/; i++)
{
if(a[i]==a[len--i])num++;
else
{
flag1=i;
flag2=len--i;
break;
}
}
//cout<<flag1<<" "<<flag2<<endl;
for(int i=flag1+; i<=len/; i++)
{
if(a[i]!=a[len--i+])
{
num1++;
break;
}
}
for(int i=flag1; i<len/; i++)
{
if(a[i]!=a[len--i-])
{
num2++;
break;
}
}
//cout<<num<<" "<<num1<<" "<<num2<<endl;
if(num==len/)
{
printf("YES\n%d\n",len/+);
}
else if(num1==)
{
printf("YES\n");
printf("%d\n",flag1+);
}
else if(num2==)
{
printf("YES\n");
printf("%d\n",flag2+);
}
else printf("NO\n");
}
return ;
}
L题 分别算出两支队在比赛中最多赢得场次 从而判断能不能获胜(大于n/2)
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn= 2e5+;
const int maxm= 1e4+;
const int inf = 0x3f3f3f3f;
typedef long long ll;
int n;
int a[maxn],b[maxn];
int main()
{
while(cin>>n)
{
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=n;i++)
cin>>b[i];
sort(a+,a+n+);
sort(b+,b+n+);
int maxa=,maxb=,mina,minb,p=;
for(int i=,j=;i<=n;)
{
if(a[i]>b[j])
{
maxa++;
i++;
j++;
}
else
{
i++;
}
}
minb=n-maxa;
for(int i=,j=;i<=n;)
{
if(b[i]>a[j])
{
maxb++;
i++;
j++;
}
else
{
i++;
}
}
mina=n-maxb;
// cout<<maxa<<" "<<mina<<endl;
// cout<<maxb<<" "<<minb<<endl;
if(maxa>n/)
{
if(maxb>n/)
printf("Both\n");
else
printf("First\n");
}
else
{
if(maxb>n/)
printf("Second\n");
else
printf("None\n");
}
}
}
codeforces Gym 100971 A、B、C、F、G、K、L的更多相关文章
- codeforces gym 100971 K Palindromization 思路
题目链接:http://codeforces.com/gym/100971/problem/K K. Palindromization time limit per test 2.0 s memory ...
- Codeforces gym 100971 D. Laying Cables 单调栈
D. Laying Cables time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- CodeForces Gym 100213F Counterfeit Money
CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...
- Codeforces GYM 100876 J - Buying roads 题解
Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...
- iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇
完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...
- [专业名词·硬件] 2、DC\DC、LDO电源稳压基本常识(包含基本原理、高效率模块设计、常见问题、基于nRF51822电源管理模块分析等)·长文
综述先看这里 第一节的1.1简单介绍了DC/DC是什么: 第二节是关于DC/DC的常见的疑问答疑,非常实用: 第三节是针对nRF51822这款芯片电源管理部分的DC/DC.LDO.1.8的详细分析,对 ...
- 编写高质量代码改善C#程序的157个建议[用抛异常替代返回错误、不要在不恰当的场合下引发异常、重新引发异常时使用inner Exception]
前言 自从.NET出现后,关于CLR异常机制的讨论就几乎从未停止过.迄今为止,CLR异常机制让人关注最多的一点就是“效率”问题.其实,这里存在认识上的误区,因为正常控制流程下的代码运行并不会出现问题, ...
- 评估指标:准确率(Precision)、召回率(Recall)以及F值(F-Measure)
为了能够更好的评价IR系统的性能,IR有一套完整的评价体系,通过评价体系可以了解不同信息系统的优劣,不同检索模型的特点,不同因素对信息检索的影响,从而对信息检索进一步优化. 由于IR的目标是在较短时间 ...
随机推荐
- Windowsforms 中对文件操作
文件及文件夹操作: 引用命名空间:using system .IO; 1.File类: 创建:File.Create(路径);——返回FileStream FileStream fs = File.C ...
- 详解Android Activity启动模式
相关的基本概念: 1.任务栈(Task) 若干个Activity的集合的栈表示一个Task. 栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...
- [翻译] API测试最佳实践 - 身份验证(Authentication)
API测试最佳实践 - 身份验证 适用等级:高级 1. 概况 身份验证通常被定义为是对某个资源的身份的确认的活动,这里面资源的身份指代的是API的消费者(或者说是调用者).一旦一个用户的身份验证通过了 ...
- 手动将Excel数据导入SQL
1. 右键点击数据库名称,Tasks --> Import Data... 2. Choose Data Source:MicroSoft Excel,选择Excel文件和Excel版本.Exc ...
- IT实习总结-上海的实习的日子
在上海实习两个多月,从找工作,到面试,最后到创业公司工作,体会了一个人在外工作的那种工作时的压力与双休时的寂寞,有时甚至有点迷惘,可能这就是生活,每个人都会经历,在经历的过程中会有不同的味道. 说说我 ...
- JAVA编程不得不看的几本经典书籍
为了帮助对java编程感兴趣的同学更好.更快的提高编程技术,武汉北大青鸟光谷校区专业老师在此推荐几本学习编程非常有用的书籍,以供大家参考. 入门类 1.<java从入门到精通>(第3版) ...
- CAD参数绘制多行文字(com接口)
在CAD设计时,需要绘制多行文字,用户可以设置设置绘制文字的高度等属性. 主要用到函数说明: _DMxDrawX::DrawMText 绘制一个多行文字.详细说明如下: 参数 说明 DOUBLE dP ...
- E. String Multiplication
E. String Multiplication time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- 从Excel读取数据,然后分析相似的数据,多线程处理(多线程比较相似的字符串,统计出相似的数量及字符串)
之前的jar包有问题,现已修改. 需要的jar包,已修改 自己去Maven中央仓库下载jar包. excel数据: 直接上代码. 程序再度优化了一遍.之后如果想再度精准,可能需要建模,最近没空继续做了 ...
- PyQt5实现第一个桌面应用程序
import sysfrom PyQt5.QtWidgets import QApplication,QWidget,QDialogfrom PyQt5.QtCore import Qt if __n ...