1.22训练赛 --ac2

Final standings

Solved: 2 out of 7

ac:A题水题  b题思维题

b题:

B. Diagonal Walking v.2
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Mikhail walks on a Cartesian plane. He starts at the point (0,0)
, and in one move he can go to any of eight adjacent points. For example, if Mikhail is currently at the point (0,0)

, he can go to any of the following points in one move:

    (1,0)

;
(1,1)
;
(0,1)
;
(−1,1)
;
(−1,0)
;
(−1,−1)
;
(0,−1)
;
(1,−1)

    . 

If Mikhail goes from the point (x1,y1)
to the point (x2,y2) in one move, and x1≠x2 and y1≠y2

, then such a move is called a diagonal move.

Mikhail has q
queries. For the i-th query Mikhail‘s target is to go to the point (ni,mi) from the point (0,0) in exactly ki moves. Among all possible movements he want to choose one with the maximum number of diagonal moves. Your task is to find the maximum number of diagonal moves or find that it is impossible to go from the point (0,0) to the point (ni,mi) in ki

moves.

Note that Mikhail can visit any point any number of times (even the destination point!).
Input

The first line of the input contains one integer q
(1≤q≤104

) — the number of queries.

Then q
lines follow. The i-th of these q lines contains three integers ni, mi and ki (1≤ni,mi,ki≤1018) — x-coordinate of the destination point of the query, y

-coordinate of the destination point of the query and the number of moves in the query, correspondingly.
Output

Print q
integers. The i-th integer should be equal to -1 if Mikhail cannot go from the point (0,0) to the point (ni,mi) in exactly ki moves described above. Otherwise the i

-th integer should be equal to the the maximum number of diagonal moves among all possible movements.
Example
Input
Copy

3
2 2 3
4 3 7
10 1 9

Output
Copy

1
6
-1

Note

One of the possible answers to the first test case: (0,0)→(1,0)→(1,1)→(2,2)

.

One of the possible answers to the second test case: (0,0)→(0,1)→(1,2)→(0,3)→(1,4)→(2,3)→(3,2)→(4,3)

.

In the third test case Mikhail cannot reach the point (10,1)
in 9 moves.

大概就是从(0,0)可以走直线可以走斜线,给定步数k,问能否k步正好到达终点,可以的话输出最多的斜线步数 。

在纸上乱画,发现可以把坐标系画成类似楷书格子的横竖斜交叉的格子

发现如果重点在斜线交叉内,在min(xd,yd)之步定可以到终点,且可以绕圈增步数,每次可增2步

然后k的大小奇偶判断

不再在写交叉内的话化未知为已知问题,即在k-1步内到达(x-1,y)或(y,x-1)

在同第一部判断

中间有的情况可以简化合并

#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
    int t;
    scanf("%d",&t);
    long long n,m,k,a,b,kmin;
    while(t--){
        scanf("%lld%lld%lld",&n,&m,&k);
        if(n%2==m%2){
            kmin=max(n,m);
            if(k<kmin)printf("-1\n");
            else if(k%2==kmin%2)printf("%lld\n",k);
            else printf("%lld\n",k-);
        }
        else{
            kmin=max(n-1,m-1);
            if(k-1<kmin)printf("-1\n");
            else printf("%lld\n",k-1);
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/-ifrush/p/10302813.html

时间: 2024-11-11 16:06:58

1.22训练赛 --ac2的相关文章

最后一周第二天训练赛之第二题

试题: B - B Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice SPOJ ICODER Description Mathews uses a brand new 16-bit instruction processor. (Yeah i am being sarcastic!). It has one register (say R) and it su

Dream_Chaser队训练赛第一场 I题

Dream_Chaser队训练赛第一场 I题 题目来自2012成都区域赛 I - Count Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4472 Description Prof. Tigris is the head of an archaeological team who is currently in charge of a

2017后期 第 1 场训练赛

题目依次为 NKOJ 上 P3496 P4236 P3774 P2407 1.数三角形 方法很多, 比如推出三边 x y z 的限制关系, 然后加加减减得到计算式子 不过也可以用观察法, 暴力计算出 n 为 1 至 13 对应的结果为: 0 0 0 1 3 7 13 22 34 50 70 95 125 相邻两数差为: 0 0 1 2 4 6 9 12 16 20 25 30 这些相邻两数相邻差又为: 0 1 1 2 2 3 3 4 4 5 5 找到规律了, 如果结果第 i 项为第 i - 1

CSU-ACM2014暑假集训基础组训练赛(1) 解题报告

•Problem A HDU 4450                 水题,签到题 水题..没啥好说的.给大家签到用的. 1 #include <cstdio> 2 int main(){ 3 int n,a,ans; 4 while(scanf("%d",&n),n){ 5 ans = 0; 6 for(int i = 0;i < n;i++){ 7 scanf("%d",&a); 8 ans += a*a; 9 } 10 pr

cumt训练赛题解

2017年4月3日 cumt2017春季--训练赛(1) A.HihoCoder 1339 (dp) 思路: 比较清晰呢,就是个dp吧.定义一下状态,dp[i][j]:前i个骰子,扔出点数和为j的方案数.然后不就很好写了嘛递推式,dp[i][j] = dp[i - 1][j - k](1<=k<=6). 好像题就做完了诶,可是窝wa了两发什么鬼.第一发爆int,第二发爆longlong,这里的trick就是方案数可能非常大,所以这题的应该把状态定义为dp[i][j]:前i个骰子,扔出点数和为j

CSU-ACM暑假集训基础组训练赛(4)解题报告

•Problem A SPOJ SUB_PROB   AC自动机 •题意: 给定一个长为M(M≤100000 )的文本串,和N(N≤1000)个长度不超过2000的模式串,问每个模式串是否在文本串中出现过? •几乎和周一课件上的第一个例题一模一样.. •把文本串丢到AC自动机里面去跑. •注意: •1.可能有两个相同的模式串(略坑吧.) •2.一个模式串可能是另一个模式串的后缀,即如果一个点的fail指针指向的点是一个“危险节点”,那么它本身也是一个“危险节点”. 1 #include <ios

HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可以工作的最长时间和一个可以完成的任务的难度的最大值, 一台机器能完成一个任务的条件是这台机器的最长工作时间和能完成任务的难度值必须都大于等于这个任务,而且一台机器最多完成一个任务,假设一个任务的时间为t,难度值为x,那么完成这个任务可以赚到的钱 money = 500 * t + 2 * x; 现在

HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是把区间 (l,r) 中大于x的数跟 x 做gcd操作. 线段树区间更新的题目,每个节点保存一个最大和最小值,当该节点的最大值和最小值相等的时候表示这个区间所有的数字都是相同的,可以直接对这个区间进行1或2操作, 进行1操作时,当还没有到达要操作的区间但已经出现了节点的最大值跟最小值相等的情况时,说明

HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第一种是行交换操作,就是把矩阵的两行进行交换,另一种是列交换操作,注意两种操作都要求行或列至少要有一个水果,第三种操作是查找,询问第A行B列的水果的能量值,如果查询的位置没有水果,则输出0. 因为n和m都很大,达到了2*10^9,但水果最多一共只有10^5个,我的做法是直接用结构体存了之后排序,然后m