题目链接:http://codeforces.com/contest/1194         

                                  A.Remove a Progression

time limit per test:2 seconds

memory limit per test:256 megabytes

input:standard input

output:standard output

You have a list of numbers from 11 to nn written from left to right on the blackboard.

You perform an algorithm consisting of several steps (steps are 11-indexed). On the ii-th step you wipe the ii-th number (considering only remaining numbers). You wipe the whole number (not one digit).

When there are less than ii numbers remaining, you stop your algorithm.

Now you wonder: what is the value of the xx-th remaining number after the algorithm is stopped?

Input

The first line contains one integer TT (1≤T≤1001≤T≤100) — the number of queries. The next TT lines contain queries — one per line. All queries are independent.

Each line contains two space-separated integers nn and xx (1≤x<n≤1091≤x<n≤109) — the length of the list and the position we wonder about. It's guaranteed that after the algorithm ends, the list will still contain at least xx numbers.

Output

Print TT integers (one per query) — the values of the xx-th number after performing the algorithm for the corresponding queries.

Example
input

Copy
3
3 1
4 2
69 6
output

Copy
2
4
12
题解:依照题意,每次删除第 i 个数,直到剩余的数的个数之和小于被删除数的数字,算法终止。在对给定算法进行一些模拟后,在纸上,我们可以意识到所有奇数都被删除了。所以,所有偶数仍然存在,答案是2X。
 #include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
while(~scanf("%d",&T))
{
while(T--)
{
int n,x;
scanf("%d%d",&n,&x);
printf("%d\n",*x);
}
}
return ;
}

B.Yet Another Crosses Problem

time limit per test:2 seconds

memory limit per test:256 megabytes

input:standard input

output:standard output

You are given a picture consisting of nn rows and mm columns. Rows are numbered from 11 to nn from the top to the bottom, columns are numbered from 11 to mm from the left to the right. Each cell is painted either black or white.

You think that this picture is not interesting enough. You consider a picture to be interesting if there is at least one cross in it. A cross is represented by a pair of numbers xx and yy, where 1≤x≤n1≤x≤n and 1≤y≤m1≤y≤m, such that all cells in row xx and all cells in column yy are painted black.

For examples, each of these pictures contain crosses:

The fourth picture contains 4 crosses: at (1,3)(1,3), (1,5)(1,5), (3,3)(3,3) and (3,5)(3,5).

Following images don't contain crosses:

You have a brush and a can of black paint, so you can make this picture interesting. Each minute you may choose a white cell and paint it black.

What is the minimum number of minutes you have to spend so the resulting picture contains at least one cross?

You are also asked to answer multiple independent queries.

Input

The first line contains an integer qq (1≤q≤5⋅1041≤q≤5⋅104) — the number of queries.

The first line of each query contains two integers nn and mm (1≤n,m≤5⋅1041≤n,m≤5⋅104, n⋅m≤4⋅105n⋅m≤4⋅105) — the number of rows and the number of columns in the picture.

Each of the next nn lines contains mm characters — '.' if the cell is painted white and '*' if the cell is painted black.

It is guaranteed that ∑n≤5⋅104∑n≤5⋅104 and ∑n⋅m≤4⋅105∑n⋅m≤4⋅105.

Output

Print qq lines, the ii-th line should contain a single integer — the answer to the ii-th query, which is the minimum number of minutes you have to spend so the resulting picture contains at least one cross.

Example
input

Copy
9
5 5
..*..
..*..
*****
..*..
..*..
3 4
****
.*..
.*..
4 3
***
*..
*..
*..
5 5
*****
*.*.*
*****
..*.*
..***
1 4
****
5 5
.....
..*..
.***.
..*..
.....
5 3
...
.*.
.*.
***
.*.
3 3
.*.
*.*
.*.
4 4
*.**
....
*.**
*.**
output

Copy
0
0
0
0
0
4
1
1
2
Note

The example contains all the pictures from above in the same order.

The first 5 pictures already contain a cross, thus you don't have to paint anything.

You can paint (1,3)(1,3), (3,1)(3,1), (5,3)(5,3) and (3,5)(3,5) on the 66-th picture to get a cross in (3,3)(3,3). That'll take you 44 minutes.

You can paint (1,2)(1,2) on the 77-th picture to get a cross in (4,2)(4,2).

You can paint (2,2)(2,2) on the 88-th picture to get a cross in (2,2)(2,2). You can, for example, paint (1,3)(1,3), (3,1)(3,1) and (3,3)(3,3) to get a cross in (3,3)(3,3) but that will take you 33 minutes instead of 11.

There are 9 possible crosses you can get in minimum time on the 99-th picture. One of them is in (1,1)(1,1): paint (1,2)(1,2) and (2,1)(2,1).

题解:题目说在一个 n 行 m 列区域内,看有没一个黑色通道通往这个区域的行与列,有输出0,没有计算需要改变白色区域的最少次数。暴力解法开两个数组记录每行和每列缺少黑色的个数,最后遍历一遍,注意每次遍历的时候都要看一下当前字母是黑色还是白色,因为每行和每列都有个重复的字母,所以要特别判断一下。

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXX = 0x7fffffff;
int main()
{
ios::sync_with_stdio(false);
cin.tie(); cout.tie();
int q;
cin>>q;
while(q--)
{
int m,n;
cin>>n>>m;
char a[n + ][m + ];
int x[n + ] , y[m + ];
memset(x,,sizeof(x));
memset(y,,sizeof(y));
for(int i = ; i < n; i++)
for(int j = ; j < m; j++)
cin>>a[i][j]; for(int i = ; i < n; i++)
{
int flag = ;
for(int j =; j < m; j++)
if(a[i][j] == '.')
flag++;
x[i] = flag;
} for(int i = ; i < m; i++)
{
int flag = ;
for(int j = ; j < n; j++)
if(a[j][i] == '.')
flag++;
y[i] = flag;
}
int ans = MAXX;
for(int i = ; i < n; i++)
{
for(int j = ; j < m; j++)
{
if(a[i][j] == '.')
ans = min(ans,x[i] + y[j] - );
else
ans = min(ans,x[i] + y[j]);
}
}
cout<<ans<<endl;
}
return ;
}

C. From S To T

time limit per test:1 second

memory limit per test:256 megabytes

input:standard input

output:standard output

You are given three strings ss, tt and pp consisting of lowercase Latin letters. You may perform any number (possibly, zero) operations on these strings.

During each operation you choose any character from pp, erase it from pp and insert it into string ss (you may insert this character anywhere you want: in the beginning of ss, in the end or between any two consecutive characters).

For example, if pp is aba, and ss is de, then the following outcomes are possible (the character we erase from pp and insert into ss is highlighted):

  • aba →→ ba, de →→ ade;
  • aba →→ ba, de →→ dae;
  • aba →→ ba, de →→ dea;
  • aba →→ aa, de →→ bde;
  • aba →→ aa, de →→ dbe;
  • aba →→ aa, de →→ deb;
  • aba →→ ab, de →→ ade;
  • aba →→ ab, de →→ dae;
  • aba →→ ab, de →→ dea;

Your goal is to perform several (maybe zero) operations so that ss becomes equal to tt. Please determine whether it is possible.

Note that you have to answer qq independent queries.

Input

The first line contains one integer qq (1≤q≤1001≤q≤100) — the number of queries. Each query is represented by three consecutive lines.

The first line of each query contains the string ss (1≤|s|≤1001≤|s|≤100) consisting of lowercase Latin letters.

The second line of each query contains the string tt (1≤|t|≤1001≤|t|≤100) consisting of lowercase Latin letters.

The third line of each query contains the string pp (1≤|p|≤1001≤|p|≤100) consisting of lowercase Latin letters.

Output

For each query print YES if it is possible to make ss equal to tt, and NO otherwise.

You may print every letter in any case you want (so, for example, the strings yEs, yes, Yes and YES will all be recognized as positive answer).

Example
input

Copy
4
ab
acxb
cax
a
aaaa
aaabbcc
a
aaaa
aabbcc
ab
baaa
aaaaa
output

Copy
YES
YES
NO
NO
Note

In the first test case there is the following sequence of operation:

  1. s=s= ab, t=t= acxb, p=p= cax;
  2. s=s= acb, t=t= acxb, p=p= ax;
  3. s=s= acxb, t=t= acxb, p=p= a.

In the second test case there is the following sequence of operation:

  1. s=s= a, t=t= aaaa, p=p= aaabbcc;
  2. s=s= aa, t=t= aaaa, p=p= aabbcc;
  3. s=s= aaa, t=t= aaaa, p=p= abbcc;
  4. s=s= aaaa, t=t= aaaa, p=p= bbcc.

题解:题目说给你三个字符串 s , t , p, 然后从 字符串p 拿任意字符插入 字符串s 任何位置, 最后匹配一下 字符串s 是否等价于 字符串t, 若匹配输出 "YES", 反之输出 "NO"。

思路: 模拟一下是否为子序列,然后记下数。

 #include<bits/stdc++.h>
using namespace std;
int main()
{
int q;
int a[],b[];
cin>>q;
while(q--)
{
string s,t,p;
memset(a,,sizeof(a));
memset(b,,sizeof(b));
cin>>s>>t>>p;
int k = ;
bool flag = true;
for(int i = ; i < s.size(); i++)
{
int j;
a[s[i] - 'a']++;
for(j = k; j < t.size(); j++)
{
if(s[i] == t[j])
{
k = j + ;
break;
}
}
if(j >= t.size())
flag = false;
}
if(!flag)
{
cout<<"NO"<<endl;
continue;
}
for(int i = ; i < p.size(); i++)
a[p[i] -'a']++;
for(int i = ; i < t.size(); i++)
b[t[i] - 'a']++;
for(int i = ; i <= ; i++)
{
if(a[i] < b[i])
{
flag = false;
break;
}
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return ;
}
 #include<iostream>
#include<string>
using namespace std; int number(string a, char b)
{
int cnt = ;
for (int i = ; i < a.size(); i++)
if (a[i] == b)
cnt++;
return cnt;
} int main()
{
int q;
cin >> q;
string s, t, p;
while (q--)
{
cin >> s >> t >> p;
int k = ;
bool is_continue = false;
for (int i = ; i < s.size(); i++)
{
if (t.find(s[i], k) != t.npos)
{
k = t.find(s[i], k)+;
}
else
{
cout << "NO" << endl;
is_continue = true;
break;
}
}
if (is_continue == true)
continue;
bool is_real = false;
for (int i = ; i < t.size(); i++)
{
if ((number(s, t[i]) + number(p, t[i])) < number(t, t[i]))
{
cout << "NO" << endl;
is_real = true;
break;
}
}
if (is_real == false)
cout << "YES" << endl;
}
return ;
}
                                                                                                                   D. 1-2-K Game
                                                                                                                       time limit per test:2 seconds
                                                                                                                       memory limit per test:256 megabytes
                                                                                                                                     input:standard input
                                                                                                                                     output:standard output

Alice and Bob play a game. There is a paper strip which is divided into n + 1 cells numbered from left to right starting from 0. There is a chip placed in the n-th cell (the last one).

Players take turns, Alice is first. Each player during his or her turn has to move the chip 1, 2 or k cells to the left (so, if the chip is currently in the cell i, the player can move it into cell i - 1, i - 2 or i - k). The chip should not leave the borders of the paper strip: it is impossible, for example, to move it k cells to the left if the current cell has number i < k. The player who can't make a move loses the game.

Who wins if both participants play optimally?

Alice and Bob would like to play several games, so you should determine the winner in each game.

Input

The first line contains the single integer T (1 ≤ T ≤ 100) — the number of games. Next T lines contain one game per line. All games are independent.

Each of the next T lines contains two integers n and k (0 ≤ n ≤ 109, 3 ≤ k ≤ 109) — the length of the strip and the constant denoting the third move, respectively.

Output

For each game, print Alice if Alice wins this game and Bob otherwise.

Example
input

Copy
4
0 3
3 3
3 4
4 4
output

Copy
Bob
Alice
Bob
Alice
题解:博弈问题两人每人能取 1 , 2 , k 个东西,谁先不能移动谁先输,我们来看看当不取K个时的SG函数:
G(s0)=0,G(s1)=1,G(s2)=2,G(s3)=0,G(S4)=1,G(S5)=2,G(s6)=1......
G(s) = 0是一个 P 态,反之是一个N态。即n≡0mod3时是必败态,否则是必胜态。
  • 根据以下原则打表:
  • 当前状态指向的所有后继状态都是必胜态,那么当前状态是必败态
  • 当前状态能够指向某一个必败态,那么当前状态是必胜态
 #include <iostream>
using namespace std; int main() {
int t;
cin >> t;
while(t--) {
int n, k;
cin >> n >> k;
if(k % != )
cout << (n % == ? "Bob\n" : "Alice\n");
else {
n %= (k + );
if(n % == && n < k)
cout << "Bob\n";
else
cout << "Alice\n";
}
}
}

Educational Codeforces Round 68 Editorial的更多相关文章

  1. Educational Codeforces Round 68 E. Count The Rectangles

    Educational Codeforces Round 68 E. Count The Rectangles 传送门 题意: 给出不超过\(n,n\leq 5000\)条直线,问共形成多少个矩形. ...

  2. Educational Codeforces Round 68 差G

    Educational Codeforces Round 68 E 题意:有 n 个线段,每个都是平行 x 或者 y 轴,只有互相垂直的两线段才会相交.问形成了多少个矩形. \(n \le 5000, ...

  3. Educational Codeforces Round 68 (Rated for Div. 2)---B

    http://codeforces.com/contest/1194/problem/B /* */ # include <bits/stdc++.h> using namespace s ...

  4. Educational Codeforces Round 53 Editorial

    After I read the solution to the problem, I found that my solution was simply unsightly. Solved 4 ou ...

  5. Educational Codeforces Round 68

    目录 Contest Info Solutions A.Remove a Progression B.Yet Another Crosses Problem C.From S To T D.1-2-K ...

  6. Educational Codeforces Round 68 (Rated for Div. 2)补题

    A. Remove a Progression 签到题,易知删去的为奇数,剩下的是正偶数数列. #include<iostream> using namespace std; int T; ...

  7. Educational Codeforces Round 68 (Rated for Div. 2) C. From S To T (字符串处理)

    C. From S To T time limit per test1 second memory limit per test256 megabytes inputstandard input ou ...

  8. Educational Codeforces Round 68 (Rated for Div. 2) D. 1-2-K Game (博弈, sg函数,规律)

    D. 1-2-K Game time limit per test2 seconds memory limit per test256 megabytes inputstandard input ou ...

  9. Educational Codeforces Round 39 Editorial B(Euclid算法,连续-=与%=的效率)

    You have two variables a and b. Consider the following sequence of actions performed with these vari ...

随机推荐

  1. 证明线程池ThreadPoolExecutor的核心线程数,最大线程数,队列长度的关系

    关于线程池的几个参数,很多人不是很清楚如何配置,他们之间是什么关系,我用代码来证明一下. package www.itbac.com; import java.util.concurrent.*; p ...

  2. 洛谷P2630 题解

    我先讲一下我的思路 将A,B,C,D四种操作用函数储存起来: 枚举所有可能出现的情况:A,B,C,D,AA,AB,AC,AD,BB,BC,BD,CC,CD,DD,ABC,ABD,ACD,BCD,ABC ...

  3. IdentityServer4笔记整理(更新中)

    1 OAuth 2.0 1.1 OAuth 2.0协议流程图 1.2 授权码模式 1.3 简化模式 1.4 资源所有者密码模式 1.5 客户端凭证模式 2 OpenID Connect(OIDC) 2 ...

  4. Android buildType混淆代码

    [话题引入] ①在Android开发完成,我们会将代码打包成APK文件.选择 菜单栏 Build --> Build APK ②将查看视图切换到 Project 模式,文件夹下有一个debug模 ...

  5. 死磕JVM之类中各部分的加载顺序

    话不多说,直接上代码: 1.通过new创建对象实例: 2.当对象中含有静态方法,且调用时: -- 调用父类静态方法: 总结: * 类中静态资源首次加载的时间是类中静态资源第一次被调用的时候或者该类的对 ...

  6. 非常实用的select下拉框-Select2.js

    在Web开发中,Select下拉框是常用的输入组件.由于原生的Select几乎很难通过CSS样式控制.一些好看的Select下拉框就只能通过模拟来实现.PHP程序员雷雪松给大家推荐一筐款不错的Sele ...

  7. 关于JSP页面的静态包含和动态包含

    JSP中有两种包含:静态包含:<%@include file="被包含页面"%> 和 动态包含:<jsp:include page="被包含页面&quo ...

  8. Unity进阶之:Shader渲染

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  9. JVM调优前戏之JDK命令行工具---jhat

    在JDK的命令行中,一般开发人员最耳熟能详的肯定就是java,javac,javap等常用命令,不过在jdk/bin下还有许多其他的命令行工具,它们被用来监测JVM运行时的状态,下面我们来详细解读一下 ...

  10. 8.8 day29 异常处理 UDP通信

    异常处理 什么是异常? ​ 程序在运行过程中出现了不可预知的错误 ​ 并且该错误没有对应的处理机制,那么就会以异常的形式表现出来 ​ 造成的影响就是整个程序无法运行 异常的结构 ​ 1.异常的类型 ​ ...