AtCoder Regular Contest 094
AtCoder Regular Contest 094
C - Same Integers
题意:
给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2;2.把任意两个数+1。求最少需要几次操作将三个数变为相同的数。
分析:
可以发现如果三个数的奇偶性相同直接加就可以了,对于奇偶性不同的,先把奇偶性相同的两个数都+1,然后按照相同的处理就可以了。可以证明没有更好的方案。
#include <bits/stdc++.h>
using namespace std;
int a,b,c,flag,ans,maxx;
int main()
{
cin>>a>>b>>c;
if(a%2==b%2&&b%2==c%2){
maxx=max(a,max(b,c));
ans+=(maxx*3-a-b-c)/2;
} else {
maxx=max(a,max(b,c));
flag=(a%2+b%2+c%2);
maxx+=(maxx%2==(flag==2));
ans+=(maxx*3-a-b-c-2)/2;
ans+=1;
}
cout<<ans;
}
D - Worst Case
题意:
给出\(Q\)组询问,每组询问给出两个数\(A_i,B_i\),问有多少个二元组\((x,y)\)使\(x\times y\le A_i\times B_i\),其中每个数最多使用两次。
给出的\(A_i,B_i\)包含在使用次数中。
分析:
可以观察得到小于\(\sqrt{A_i\times B_i}\)的数可以随便组合并且一定保证合法。并且无法找出另一种方式使其比这种分配方式更加优秀。
那么直接计算即可,可以设\(A_i\times B_i\)为\(p\),\(\sqrt{A_i\times B_i}\)为\(l\),那么如果\(l\times(l+1)<p\)的话,\(ans=2\times(l-1)+1\)否则则不\(+1\)。
考虑\(p\)正好为完全平方数的情况,如果\(A_i,B_i\)恰好等于\(l\)则不用管,否则一定会占用其中一个位置,所以需要相应减去1.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll q,a,b,cnt,p,l;
int main()
{
cin>>q;
while(q--){
cin>>a>>b;
p=a*b;
l=sqrt(p);
if(l*(l+1)<p) cnt=2*(l-1)+1;
else cnt=2*(l-1);
if(l*l==p&&a!=b) cnt--;
if(a*b==4) cnt=1;
cout<<cnt<<endl;
}
}
E - Tozan and Gezan
题意:
给出\(a,b\)且\(\sum a=\sum b\)两个数列,A,B两人分别给数列中的数进行-1操作,当序列中的数都相同时停止,A希望轮数尽量多,B希望轮数尽量少,求至少会进行多少轮。
分析:
貌似比上一道题还要简单一些。
观察得出当所有数都一样是,答案是0,当有任何一组数不一样是,假设\(a_i<b_i\)那么就可以一直缩减到0,如果\(a_i>b_i\)那么就可以把另一组数减小到0,因为这一组数肯定是B是无力回天了。
那么直接找到B中最小的那个就可以了。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN=2e6+7;
ll a[MAXN],b[MAXN],n,sum,minn=1e9+7;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
sum+=a[i];
if(a[i]>b[i]) if(minn>b[i]) minn=b[i];
}
if(minn==1e9+7) cout<<0<<endl;
else cout<<sum-minn;
}
F - Normalization
题意:
有一个由abc组成的串,可以选择相邻的两个不同的字符替换成第三种字符,问最多能形成多少种不同的串。
分析:
思考在那些时候字符串S转换不成T。
我们可以将a,b,c看成是数字0,1,2。那么发现,每一次更改都不会改变所有数位之和在%3意义下的值。也就是说T所有数位之和如果与S不同,那么是无法转换的。
如果一开始所有字符都是一样的,那么也就没有什么转换的方法。
可以发现,如果如果T中字符相邻两两不同,那么他是无法被转换而成的。
那么是不是剩下的都可以了呢?
可以通过打表发现,3以内的数据非常奇怪没有规律,但是3以上的符合上述规律。
DP求解即可。
#include <bits/stdc++.h>
using namespace std;
const int MAXN=2e6+7;
#define mo 998244353
char s[MAXN];
int f[MAXN][3][3][2],n,ans;
inline bool check_all()
{
for(int i=1;i<=n-1;i++)
if(s[i]!=s[i+1]) return 0;
return 1;
}
inline bool check_same()
{
for(int i=1;i<=n-1;i++)
if(s[i]==s[i+1]) return 0;
return 1;
}
int main()
{
scanf("%s",s+1);
n=strlen(s+1);
if(check_all()) {
cout<<1;
return 0;
}
if(n<=3){
if(n==2) cout<<2;
else if(s[1]!=s[2]&&s[2]!=s[3]&&s[1]!=s[3]) cout<<3;
else if(s[1]==s[3]) cout<<7;
else cout<<6;
return 0;
}
int tot=0;
for(int i=1;i<=n;i++)
tot+=s[i]-'a';
tot%=3;
f[1][1][1][0]=f[1][2][2][0]=f[1][0][0][0]=1;
for(int i=2;i<=n;i++)
for(int j=0;j<=2;j++)
for(int k=0;k<=2;k++)
for(int p=0;p<=2;p++){
int last=(j-k+3)%3;
(f[i][j][k][1]+=f[i-1][last][p][1])%=mo;
if(k==p) (f[i][j][k][1]+=f[i-1][last][p][0])%=mo;
else (f[i][j][k][0]+=f[i-1][last][p][0])%=mo;
}
for(int i=0;i<=2;i++)
(ans+=f[n][tot][i][1])%=mo;
cout<<ans+check_same();
}
AtCoder Regular Contest 094的更多相关文章
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 094 D Worst Case【思维题】
https://arc094.contest.atcoder.jp/tasks/arc094_b 题意: 在2次超多人的比赛中,你取得的成绩依次为第A名和第B名.一个人的成绩为a和b时,当且仅当ab& ...
- AtCoder Regular Contest 094 D Worst Case
Worst Case 思路: 使 a <= b 当 a == b 时 或者 a == b - 1 时,答案显然为 2 * (a - 1) 否则找到最大的 c ,使得 c * c < a * ...
- *AtCoder Regular Contest 094 F - Normalization
$n \leq 200000$的abc字符串,现能进行如下变换零次或若干次:选一个$i<n$且$s_i \neq s_{i+1}$,把$s_i$和$s_{i+1}$替换成abc三个字母中除了这两 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
随机推荐
- Handler用Bundle传值
package com.handler.cn; import android.app.Activity; import android.os.Bundle; import android.os.Han ...
- 机械迷城MAC下载及攻略
点击下载 无意间在verycd上看到这个游戏,很好玩的一个游戏. 画风非常可爱,有点复古风. 这里是 机械迷城 的专题频道 http://pc.pcgames.com.cn/pczq/jxmc/
- delphi xe-intarweb 功能记录
IWServerController.HistoryEnabled := True; //使浏览器后退.前进按钮有效TIWForm2.Create(WebApplication).Show; //建 ...
- 你不知道的Javascript(上卷)读书笔记之四 ---- 提升、this
1. 提升 使用var声明的变量声明和函数的声明(函数表达式不会)会被提升至所在函数作用域顶部 a. 从编译器角度出发 回忆一下, 中关于编译器的内容,引擎会在解释 JavaScript 代码之前首先 ...
- 如果"一切是IO"“一切是file”是成立的,那么上述的想法也一定可以实现吧 awk对apache日志分析 ---
定时执行 自动化处理 直接入库 再去读取这个file入库: root@VM---ubuntu:/var/log/apache2# awk '{print $1 "\t" $7}' ...
- 2015-03-12——简析DOM2级事件
DOM2级事件 事件的几种类型:对象事件,鼠标事件,键盘事件,表单事件,W3CDOM事件,以及针对浏览器的事件. 对象事件:window对象,也是javascript对象.load 适用于windo ...
- js浏览器调试
JS调试 sources界面(主要用来控制执行) 打断点,右上角四个按钮分别是:跳到下一个断点,单步调试,跳入,跳出. 鼠标悬浮在变量上可以查看变量的属性: console界面(主要用于查看输出) 主 ...
- eclipse欺骗了我
Java源文件(.java)和Java的字节码文件(.class)跟 package 是个什么关系? 平时使用 eclipse 的时候,发现 .java 文件目录必须和 package 包名保持一致, ...
- python数据类型一(重点是字符串的各种操作)
一.python基本数据类型 1,int,整数,主要用来进行数学运算 2,bool,布尔类型,判断真假,True,False 3,str,字符串,可以保存少量数据并进行相应的操作(未来使用频率最高的一 ...
- JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...