Codeforces Round #220 (Div. 2)
毒瘤场.....
A题:,真码农题,直接干爆,枚举,注意越界问题,wa37的看这组数据1 10 1 5 2 2,应该是no
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pii pair<int,int>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0) using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f; int main()
{
int n,m,i,j,a,b;
scanf("%d%d%d%d%d%d",&n,&m,&i,&j,&a,&b);
int ans1=-,ans2=-,ans3=-,ans4=-;
if(abs(i-)%a==&&abs(j-)%b==&&abs(i-)/a%==abs(j-)/b%)
{
if(abs(j-)/b!=&&(<=i-a||i+a<=n)&&abs(i-)/a==)ans1=max(abs(i-)/a,abs(j-)/b);
else if(abs(i-)/a!=&&(<=j-b||j+b<=m)&&abs(j-)/b!=)ans1=max(abs(i-)/a,abs(j-)/b);
else if(abs(j-)/b!=&&(<=i-a||i+a<=n)&&abs(i-)/a!=&&(<=j-b||j+b<=m))ans1=max(abs(i-)/a,abs(j-)/b);
else if(abs(i-)/a==&&abs(j-)/b==)ans1=max(abs(i-)/a,abs(j-)/b);
}
if(abs(i-)%a==&&abs(j-m)%b==&&abs(i-)/a%==abs(j-m)/b%)
{
if(abs(j-m)/b!=&&(<=i-a||i+a<=n)&&abs(i-)/a==)ans2=max(abs(i-)/a,abs(j-m)/b);
else if(abs(i-)/a!=&&(<=j-b||j+b<=m)&&abs(j-m)/b!=)ans2=max(abs(i-)/a,abs(j-m)/b);
else if(abs(j-m)/b!=&&(<=i-a||i+a<=n)&&abs(i-)/a!=&&(<=j-b||j+b<=m))ans2=max(abs(i-)/a,abs(j-m)/b);
else if(abs(i-)/a==&&abs(j-m)/b==)ans2=max(abs(i-)/a,abs(j-m)/b);
}
if(abs(i-n)%a==&&abs(j-)%b==&&abs(i-n)/a%==abs(j-)/b%)
{
if(abs(j-)/b!=&&(<=i-a||i+a<=n)&&abs(i-n)/a==)ans3=max(abs(i-n)/a,abs(j-)/b);
else if(abs(i-n)/a!=&&(<=j-b||j+b<=m)&&abs(j-)/b!=)ans3=max(abs(i-n)/a,abs(j-)/b);
else if(abs(j-)/b!=&&(<=i-a||i+a<=n)&&abs(i-n)/a!=&&(<=j-b||j+b<=m))ans3=max(abs(i-n)/a,abs(j-)/b);
else if(abs(i-n)/a==&&abs(j-)/b==)ans3=max(abs(i-n)/a,abs(j-)/b);
}
if(abs(i-n)%a==&&abs(j-m)%b==&&abs(i-n)/a%==abs(j-m)/b%)
{
if(abs(j-m)/b!=&&(<=i-a||i+a<=n)&&abs(i-n)/a==)ans4=max(abs(i-n)/a,abs(j-m)/b);
else if(abs(i-n)/a!=&&(<=j-b||j+b<=m)&&abs(j-m)/b!=)ans4=max(abs(i-n)/a,abs(j-m)/b);
else if(abs(j-m)/b!=&&(<=i-a||i+a<=n)&&abs(i-n)/a!=&&(<=j-b||j+b<=m))ans4=max(abs(i-)/a,abs(j-m)/b);
else if(abs(i-n)/a==&&abs(j-m)/b==)ans4=max(abs(i-n)/a,abs(j-m)/b);
}
// printf("%d %d\n",abs(i-n)/a%2,abs(j-m)/b%2);
if(ans1!=-||ans2!=-||ans3!=-||ans4!=-)
{
int ans=;
if(ans1!=-)ans=min(ans,ans1);
if(ans2!=-)ans=min(ans,ans2);
if(ans3!=-)ans=min(ans,ans3);
if(ans4!=-)ans=min(ans,ans4);
printf("%d\n",ans);
}
else puts("Poor Inna and pony!");
return ;
}
/********************
3 5 2 2 1 3
********************/
A
B题:日常贪心不会写,xjb写成了dp,还写搓了
题意:找相邻的合成9,要求组出最多的9的方案数;
直接贪心的扫到最远处,类似于72727这样的,然后乘到答案上
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pii pair<int,int>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0) using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f; char s[N];
int main()
{
scanf("%s",s+);
int sz=strlen(s+);
ll ans=,p=;
for(int i=;i<=sz;i++)
{
if(s[i]-''+s[i-]-''==)p++;
else
{
// printf("%d\n",p);
if(p!=&&p%==)ans*=(p+)/;
p=;
} }
// printf("%d\n",p);
if(p!=&&p%==)ans*=(p+)/;
printf("%lld\n",ans);
return ;
}
/******************** ********************/
B
C:有nm的矩阵,找最长的dima,转化成dag上的dp,从d开始dp,然后找能走的最远距离除4就是答案,注意这题要判环,用一个vis标记,-1表示当前正在访问的这一条路,1表示访问过了,0表示没有访问过,如果访问到了一个正在访问的地方,那么就是有环
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pii pair<int,int>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0) using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f; char s[N][N];
int dp[N*N];
int n,m;
int vis[N*N];
vector<int>v[N*N];
int dfs(int u)
{
// printf("%d\n",u);
if(dp[u]!=-)return dp[u];
dp[u]=;vis[u]=-;
for(int i=;i<v[u].size();i++)
{
int x=v[u][i];
if(vis[x]<)
{
puts("Poor Inna!");
exit();
}
dp[u]=max(dp[u],dfs(x)+);
}
vis[u]=;
return dp[u];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)
scanf("%s",s[i]);
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(s[i][j]=='D')
{
if(i+<n&&s[i+][j]=='I')v[i*m+j].pb((i+)*m+j);
if(i->=&&s[i-][j]=='I')v[i*m+j].pb((i-)*m+j);
if(j+<m&&s[i][j+]=='I')v[i*m+j].pb(i*m+j+);
if(j->=&&s[i][j-]=='I')v[i*m+j].pb(i*m+j-);
}
else if(s[i][j]=='I')
{
if(i+<n&&s[i+][j]=='M')v[i*m+j].pb((i+)*m+j);
if(i->=&&s[i-][j]=='M')v[i*m+j].pb((i-)*m+j);
if(j+<m&&s[i][j+]=='M')v[i*m+j].pb(i*m+j+);
if(j->=&&s[i][j-]=='M')v[i*m+j].pb(i*m+j-);
}
else if(s[i][j]=='M')
{
if(i+<n&&s[i+][j]=='A')v[i*m+j].pb((i+)*m+j);
if(i->=&&s[i-][j]=='A')v[i*m+j].pb((i-)*m+j);
if(j+<m&&s[i][j+]=='A')v[i*m+j].pb(i*m+j+);
if(j->=&&s[i][j-]=='A')v[i*m+j].pb(i*m+j-);
}
else if(s[i][j]=='A')
{
if(i+<n&&s[i+][j]=='D')v[i*m+j].pb((i+)*m+j);
if(i->=&&s[i-][j]=='D')v[i*m+j].pb((i-)*m+j);
if(j+<m&&s[i][j+]=='D')v[i*m+j].pb(i*m+j+);
if(j->=&&s[i][j-]=='D')v[i*m+j].pb(i*m+j-);
}
}
}
memset(dp,-,sizeof dp);
int ans=;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
int res=dfs(i*m+j);
if(s[i][j]=='D')
ans=max(ans,res/);
}
if(ans==)puts("Poor Dima!");
else printf("%d\n",ans);
return ;
}
/******************** ********************/
C
D:有一个队列,三种操作,1代表插入1,0代表插入0,-1代表删除下标为a[i]的数,最后输出队列里的数即可
套路题,树状数组维护前缀和,每次删点就在树状数组里的对应地方删点,然后二分找对应在树状数组里的下标
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pii pair<int,int>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0) using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f; int sum[N],a[N],ans[N];
int cnt;
void add(int i,int v)
{
while(i<N)
{
sum[i]+=v;
i+=i&(-i);
}
}
int query(int i)
{
int ans=;
while(i>)
{
ans+=sum[i];
i-=i&(-i);
}
return ans;
}
int change(int x)
{
int l=,r=cnt+;
while(l<r-)
{
int m=(l+r)>>;
// printf("%d %d\n",m,query(m));
if(query(m)<x)l=m;
else r=m;
}
if(query(r)<x)return -;
return r;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)scanf("%d",&a[i]);
cnt=;
for(int i=;i<n;i++)
{
int x;
scanf("%d",&x);
if(x==-)
{
vector<int>v;
for(int j=;j<=m;j++)
{
int pos=change(a[j]);
// printf("###%d!!!\n",pos);
if(pos==-)break;
v.pb(pos);
}
for(int i=;i<v.size();i++)
add(v[i],-);
}
else
{
add(cnt,);
ans[cnt++]=x;
}
}
// printf("%d\n",change(1));
if(change()==-)return *puts("Poor stack!");
for(int i=;;i++)
{
int pos=change(i);
if(pos==-)break;
printf("%d",ans[pos]);
}
return ;
}
/******************** ********************/
D
Codeforces Round #220 (Div. 2)的更多相关文章
- Codeforces Round #220 (Div. 2)  D - Inna and Sequence
		
D - Inna and Sequence 线段数维护区间有几个没有被删除的数,利用线段树的二分找第几个数在哪里,然后模拟更新就好啦. #include<bits/stdc++.h> #d ...
 - Codeforces Round #277 (Div. 2) 题解
		
Codeforces Round #277 (Div. 2) A. Calculating Function time limit per test 1 second memory limit per ...
 - Codeforces Round #633 (Div. 2)
		
Codeforces Round #633(Div.2) \(A.Filling\ Diamonds\) 答案就是构成的六边形数量+1 //#pragma GCC optimize("O3& ...
 - Codeforces Round #366 (Div. 2) ABC
		
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
 - Codeforces Round #354 (Div. 2) ABCD
		
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
 - Codeforces Round #368 (Div. 2)
		
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
 - cf之路,1,Codeforces Round #345 (Div. 2)
		
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
 - Codeforces Round #279 (Div. 2) ABCDE
		
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
 - Codeforces Round #262 (Div. 2) 1003
		
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
 
随机推荐
- Django限制请求method
			
1.常用的请求method 1.1 GET请求: GET请求一般用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改.比如向服务器获取某篇文章的详情. 1.2 POST请求: PO ...
 - JDK源代码学习系列05----LinkedList
			
JDK源代码学习系列05----LinkedList 1.LinkedList简单介绍 LinkedList是基于双向 ...
 - Android Paint setXfermode
			
背景: dst 前景: src PorterDuff.Mode.CLEAR 清除画布上图像 PorterDuff.Mode.XOR 取两层图像的非交集部门 PorterDuff.Mo ...
 - 安全必须作为基础,融入到产品开发过程——By Me
			
安全必须作为基础融入,让公司兄弟姐妹具备足够的安全意识,且逐渐具备必要的安全经验,带着安全思维去执行产品的架构设计.研发.测试.运维(甚至完整的产品生命周期),这是一种有远见.负责人的产品过程!! 下 ...
 - 利用EasySQLMAIL实现自动填写Excel表格并发送邮件(2)
			
利用EasySQLMAIL实现自动填写Excel表格并发送邮件 转自:http://blog.sina.com.cn/s/blog_1549483b70102witg.html 前一篇博文中记录了“利 ...
 - 【教程】Microsoft Visual Studio 2015 安装Android SDK
			
http://blog.sina.com.cn/s/blog_51f9ffaa0102vuhy.html Hi,大家好,自vs2015发布后,有很多小伙伴尝试使用VS2015开发安卓,由于是新手,一折 ...
 - LeetCode:N叉树的层次遍历【429】
			
LeetCode:N叉树的层次遍历[429] 题目描述 给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2, ...
 - DbEntry.Net(Lephone Framework)  Access ORM:安装和简单使用
			
项目中用到Access数据库,之前用的普通Ado.Net 三层.遇到表字段叫多时,就比较费力.想要使用ORM,无奈EF不支持Access.虽然可以改写linq to sql为Linq to Acces ...
 - APDU指令返回码及其代表含义
			
9000 正常 成功执行6200 警告 信息未提供6281 警告 回送数据可能出错6282 警告 文件长度小于Le6283 警告 选中的文件无效6284 警告 FCI格式与P2指定的不符6300 警告 ...
 - MMU解读
			
转:https://blog.csdn.net/yueqian_scut/article/details/24816757 mmu页表也是放在内存中,mmu里有一个寄存器存放页表首地址,从而找到页表( ...