拉了CF583和CF486的两套div2题目

还是先贴宏定义部分

#define MAXN 1000000+5
#define MOD 1000000007
#define PI (acos(-1.0))
#define EPS 1e-6
#define MMT(s,a) memset(s, a, sizeof s)
#define GO(i,a,b) for(int i = (a); i < (b); ++i)
#define GOE(i,a,b) for(int i = (a); i <= (b); ++i)
#define OG(i,a,b) for(int i = (a); i > (b); --i)
#define OGE(i,a,b) for(int i = (a); i >= (b); --i)


A - Asphalting Roads(CF-583A)

题意就是n条水平路,n条竖直路,构成井字形状。然后第i天会到(xi,yi)这个路口,如果这个路口得两条路都没有被染色,就输出这天并把两个路口都染上颜色,否则跳到下一天。

输出所有可以染色得天数。

题目思路:标记遍历即可

 int main(){
ios_base::sync_with_stdio(false), cout.tie(), cin.tie();
int n,x,y;
cin>>n;
int mp1[] = {},mp2[] = {};
GO(i,,n*n){
cin>>x>>y;
if(mp1[x] == && mp2[y] == ){
cout << i+ << " ";
mp1[x] = mp2[y] = ;
}
}
cout << endl; return ;
}

B - Robot's Task(CF-583B)

题意就是最开始从左往右走,如果现在值Num比a[i]大,则Num+1,否则跳过他,走到尽头如果有数没有经过,则转向再次走,已经走过的地方不能再走。

Num初始值为0,问至少转向几次。

思路:模拟即可

 int main(){
ios_base::sync_with_stdio(false), cout.tie(), cin.tie();
int n;
int a[] = {},vis[] = {};
cin>>n;
GOE(i,,n){
cin>>a[i];
}
bool flag = true;
int cnt = n,ans = ,num = ;
while(cnt > ){
if(flag){
GOE(i,,n){
if(!vis[i] && num >= a[i]){
vis[i] = ;
num++;
cnt--;
}
}
}
else{
OGE(i,n,){
if(!vis[i] && num >= a[i]){
vis[i] = ;
num++;
cnt--;
}
}
}
flag = !flag;
if(cnt > )
ans++;
}
cout << ans << endl; return ;
}

C - GCD Table(CF-583C)

给你一个打乱了的GCD表,问是哪些值构成的。

思路:这n个数一定就是对角线上的数,直接降序排列然后暴力找,每次找到的最大的数一定是其中一个数,然后求出它与已经求出的所有数的gcd在队列中去掉两个这个gcd数,保证所有大于等于下一个数字的gcd一定都被去掉了,剩下的最大的又是要找的数。

额外定义

template<typename T>
using maxHeap = priority_queue<T, vector<T>, less<T> >;

template<typename T>
inline T gcd(T a, T b){ return b==0 ? a : gcd(b,a%b); }

代码

 int main(){
ios_base::sync_with_stdio(false), cout.tie(), cin.tie();
int n,k = ,temp,num;
int a[],b[];
cin>>n;
GOE(i,,n*n){
cin>>a[i];
}
sort(a+,a++n*n);
maxHeap<int> q;
OG(i,n*n,){
if(!q.empty())
temp = q.top();
else
temp = ;
if(a[i] == temp){
q.pop();
continue;
}
GO(j,,k){
num = gcd(b[j],a[i]);
q.push(num);
q.push(num);
}
b[k++] = a[i];
}
GO(i,,k)
cout << b[i] << " ";
cout << endl; return ;
}

F - Calculating Function(CF-486A)

题意就是按照他给的公式输出F(n);

思路:可以推出n为偶数是F(n) = n/2,否则F(n) = n/2 - n;

代码

 int main(){
ios_base::sync_with_stdio(false), cout.tie(), cin.tie();
ll n;
cin>>n;
if (n&)
cout << n/ - n << endl;
else
cout << n/ << endl; return ;
}

G - OR in Matrix(CF-486B)

题目就是说bij为i行和j列的值OR操作的结果,现在给你操作后的表,要你求操作前的表。

思路:如果bij = 0,则证明i行和j列全是0,如果是1,则证明i行和j列必须有一个1,所以先把所有值设为1,按照题目把某些行列变为0,再判断一遍是否满足题意即可

代码

 int main(){
ios_base::sync_with_stdio(false), cout.tie(), cin.tie();
int n,m;
int a[][],b[][];
fill(b[],b[]+*,);
cin>>n>>m;
GOE(i,,n){
GOE(j,,m){
cin>>a[i][j];
if(a[i][j] == ){
GOE(ii,,n)
b[ii][j] = ;
GOE(jj,,m)
b[i][jj] = ;
}
}
} GOE(i,,n){
GOE(j,,m){
if(a[i][j] == ){
int flag = ;
GOE(ii,,n){
if(b[ii][j] == ){
flag = ;
break;
}
}
GOE(jj,,m){
if(b[i][jj] == ){
flag = ;
break;
}
}
if(!flag){
cout << "NO" << endl;
exit();
}
}
}
} cout << "YES" << endl;
GOE(i,,n){
GOE(j,,m)
cout << b[i][j] << " ";
cout << endl;
} return ;
}

H - Palindrome Transformation(CF-486C)

题意就是4种操作,最开始在k位置操作,问最少操作多少次使得原串变成回文串。

思路:因为是对称的,我们先不要管最开始在哪个位置,遍历即可,当a[i] != a[n-i-1]时候,我们再想是变a[i]还是变另一个,然后答案加上这个值。同时往容器中加上从k走到i远还是走到n-i-1近。

最后排序,答案加上最远距离于最近距离之差再加上这两者距离k最近的距离即可。

为什么只需要不需要管k的位置,因为k无论在哪里,我们都需要把所有不符合的字符走到,所以这里得花掉最远距离和最近距离的差,同时我们最开始在k,需要走到最近的位置开始遍历上一段距离,所以最终答案就是

  ans = 每个不合格字符的操作次数 + 不合格字符的区间长度 + 从k位置走到这个区间的某一端点的距离;

因为不管你的k是否在这个区间内,都需要遍历一遍这个区间。

 int main(){
ios_base::sync_with_stdio(false), cout.tie(), cin.tie();
int n,k;
string s;
vector<int> q;
cin>>n>>k>>s;
int len = n/,ans = ;
GO(i,,len){
if(s[i] != s[n--i]){
int tp = abs(s[i] - s[n--i]);
tp = min(tp,-tp);
ans += tp;
if(tp)
q.PB((abs(i+-k) < abs(n-i-k)) ? i+ : n-i);
}
}
int cnt = q.size();
if(q.empty())
cout << ans << endl;
else{
sort(q.begin(),q.end());
ans += q[cnt-] - q[] + min(abs(q[cnt-]-k),abs(q[]-k));
cout << ans << endl;
}
return ;
}

D题E题时间关系暂时不补了。

ACM团队周赛题解(2)的更多相关文章

  1. ACM团队周赛题解(1)

    这次周赛题目拉了CF315和CF349两套题. 因为我代码模板较长,便只放出关键代码部分 #define ll long long #define MMT(s,a) memset(s, a, size ...

  2. ACM团队周赛题解(3)

    940和822两套div.2 老规矩 #define MAXN 1000000+5#define MOD 1000000007#define PI (acos(-1.0))#define EPS 1e ...

  3. 2015浙江财经大学ACM有奖周赛(一) 题解报告

    2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...

  4. ACM团队招新赛题解

    标程代码全部为C语言编写.代码中的#if LOCAL_ 至#endif为本地一些调试内容,可以忽略. Xenny的A+B(1)[容易][签到] 签到题,做不出的话可能你有点不太适合ACM了. Xenn ...

  5. SUST_ACM_2019届暑期ACM集训热身赛题解

    问题A:Hello SUST! 知识点:基本输入输出 C/C++: #include <stdio.h> int main() { int n; scanf("%d", ...

  6. FJUT2019暑假第二次周赛题解

    A 服务器维护 题目大意: 给出时间段[S,E],这段时间需要人维护服务器,给出n个小时间段[ai,bi],代表每个人会维护的时间段,每个人维护这段时间有一个花费,现在问题就是维护服务器[S,E]这段 ...

  7. 「POJ3436」ACM Computer Factory题解

    题意: 有很多台机器,可以把物件从一种状态改装成另一种状态,初始全为\(0\),最终状态全为\(1\),让你可以拼凑机器,请问最大总性能为多少,且要求输出方案. 题解: 这道题是真的水啊,我不想写太多 ...

  8. ACM: 限时训练题解-Runtime Error-二分查找

    Runtime Error   Bahosain was trying to solve this simple problem, but he got a Runtime Error on one ...

  9. ACM: 限时训练题解-Heavy Coins-枚举子集-暴力枚举

    Heavy Coins   Bahosain has a lot of coins in his pocket. These coins are really heavy, so he always ...

随机推荐

  1. 解决Sklearn中使用数据集MNIST无法获取的问题(WinError 10060)

    今天在学习PCA的时候,使用mnist数据集遇到一个问题,代码是这样的: import numpy as np from sklearn.datasets import fetch_mldata mn ...

  2. springboot的mybatis的xml相关的配置

    POM文件的配置: mybatis.type-aliases-package=com.handsight.platform.fras mybatis.mapper-locations=classpat ...

  3. 一篇文章让你马上入门Hibernate

    在前面我们学完了Struts2,接下来我们就要去学习第二个框架Hibernate. 那什么是Hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对 ...

  4. C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)

    C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...

  5. Spring学习之旅(九)--SpringMVC高级技术

    文件上传 在 Web 应用中,允许用户上传文件是很常见的需求.文件上传通常是采用 multipart 格式,而 DispatcherServlet 并没有任何解析 multipart 请求数据的功能, ...

  6. Spring学习之旅(一)--初始Spring

    之前从博客.视频断断续续的学到了 Spring 的相关知识,但是都是一个个碎片化的知识.刚好最近在读 <Sprign实战(第四版)>,所以借此机会重新整理下Spring 系列的内容. Sp ...

  7. 剖析nsq消息队列(一) 简介及去中心化实现原理

    分布式消息队列nsq,简单易用,去中心化的设计使nsq更健壮,nsq充分利用了go语言的goroutine和channel来实现的消息处理,代码量也不大,读不了多久就没了.后期的文章我会把nsq的源码 ...

  8. 【IDEA】在IDEA中使用@Slf4j报错,找不到log

    题:在IDEA中使用@Slf4j报错,找不到log 解决方法:需要在IDEA中安装插件lombok 详细步骤: 1.File->Settings 2.Plugins->Browse rep ...

  9. JS函数提升和变量提升

    1.1什么是函数提升和变量的提升? JS引擎在运行整个JS代码的过程中,分为俩步. 第一步是读取和解析JS代码,第二部是执行. 在引擎解析JS代码的时候,当解析器遇见变量声明(var 变量名)和函数声 ...

  10. java后台图片上传预检失败解决方案

    1.首先因为服务器端会先发送一个option请求到后台  在后台返回一个post给页面 页面在处理post请求给接口 2.先写一个过滤器, 我们自己定义一个过滤器 package com.adtime ...