1、小Q定义了一种数列称为翻转数列:
给定整数n和m, 满足n能被2m整除。对于一串连续递增整数数列1, 2, 3, 4..., 每隔m个符号翻转一次, 最初符号为'-';。
例如n = 8, m = 2, 数列就是: -1, -2, +3, +4, -5, -6, +7, +8.
而n = 4, m = 1, 数列就是: -1, +2, -3, + 4.
小Q现在希望你能帮他算算前n项和为多少。
输入描述:
输入包括两个整数n和m(2 <= n <= 109, 1 <= m), 并且满足n能被2m整除。
输出描述:
输出一个整数, 表示前n项和。
输入例子1:
8 2
输出例子1:
8
例子说明1:
2、牛牛和羊羊正在玩一个纸牌游戏。这个游戏一共有n张纸牌, 第i张纸牌上写着数字ai。
牛牛和羊羊轮流抽牌, 牛牛先抽, 每次抽牌他们可以从纸牌堆中任意选择一张抽出, 直到纸牌被抽完。
他们的得分等于他们抽到的纸牌数字总和。
现在假设牛牛和羊羊都采用最优策略, 请你计算出游戏结束后牛牛得分减去羊羊得分等于多少。
输入描述:
输入包括两行。
第一行包括一个正整数n(1 <= n <= 105),表示纸牌的数量。
第二行包括n个正整数ai(1 <= ai <= 109),表示每张纸牌上的数字。
输出描述:
输出一个整数, 表示游戏结束后牛牛得分减去羊羊得分等于多少。
输入例子1:
3
2 7 4
输出例子1:
5
例子说明1:
3、小Q的父母要出差N天,走之前给小Q留下了M块巧克力。小Q决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,表示父母出差的天数N(N<=50000)和巧克力的数量M(N<=M<=100000)。
输出描述:
输出一个数表示小Q第一天最多能吃多少块巧克力。
输入例子1:
3 7
输出例子1:
4
例子说明1:
4、小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌曲的先后顺序的情况下,请问有多少种组成歌单的方法。
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含一个整数,表示歌单的总长度K(1<=K<=1000)。
接下来的一行包含四个正整数,分别表示歌的第一种长度A(A<=10)和数量X(X<=100)以及歌的第二种长度B(B<=10)和数量Y(Y<=100)。保证A不等于B。
输出描述:
输出一个整数,表示组成歌单的方法取模。因为答案可能会很大,输出对1000000007取模的结果。
输入例子1:
5
2 3 3 3
输出例子1:
9
例子说明1:
5、小Q的公司最近接到m个任务, 第i个任务需要xi的时间去完成, 难度等级为yi。
小Q拥有n台机器, 每台机器最长工作时间zi, 机器等级wi。
对于一个任务,它只能交由一台机器来完成, 如果安排给它的机器的最长工作时间小于任务需要的时间, 则不能完成,如果完成这个任务将获得200 * xi + 3 * yi收益。
对于一台机器,它一天只能完成一个任务, 如果它的机器等级小于安排给它的任务难度等级, 则不能完成。
小Q想在今天尽可能的去完成任务, 即完成的任务数量最大。如果有多种安排方案,小Q还想找到收益最大的那个方案。小Q需要你来帮助他计算一下。
输入描述:
输入包括N + M + 1行,
输入的第一行为两个正整数n和m(1 <= n, m <= 100000), 表示机器的数量和任务的数量。
接下来n行,每行两个整数zi和wi(0 < zi < 1000, 0 <= wi <= 100), 表示每台机器的最大工作时间和机器等级。
接下来的m行,每行两个整数xi和yi(0 < xi < 1000, 0 <= yi<= 100), 表示每个任务需要的完成时间和任务的难度等级。
输出描述:
输出两个整数, 分别表示最大能完成的任务数量和获取的收益。
输入例子1:
1 2
100 3
100 2
100 1
输出例子1:
1 20006
例子说明1:
6、画家小Q又开始他的艺术创作。小Q拿出了一块有NxM像素格的画板, 画板初始状态是空白的,用'X'表示。
小Q有他独特的绘画技巧,每次小Q会选择一条斜线, 如果斜线的方向形如'/',即斜率为1,小Q会选择这条斜线中的一段格子,都涂画为蓝色,用'B'表示;如果对角线的方向形如'\',即斜率为-1,小Q会选择这条斜线中的一段格子,都涂画为黄色,用'Y'表示。
如果一个格子既被蓝色涂画过又被黄色涂画过,那么这个格子就会变成绿色,用'G'表示。
小Q已经有想画出的作品的样子, 请你帮他计算一下他最少需要多少次操作完成这幅画。
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数N和M(1 <= N, M <= 50), 表示画板的长宽。
接下来的N行包含N个长度为M的字符串, 其中包含字符'B','Y','G','X',分别表示蓝色,黄色,绿色,空白。整个表示小Q要完成的作品。
输出描述:
输出一个正整数, 表示小Q最少需要多少次操作完成绘画。
输入例子1:
4 4
YXXB
XYGX
XBYY
BXXY
输出例子1:
3
例子说明1:
XXXX
XXXX
XXXX
XXXX
->
YXXX
XYXX
XXYX
XXXY
->
YXXB
XYBX
XBYX
BXXY
->
YXXB
XYGX
XBYY
BXXY
1、
n,m=map(int,raw_input().strip().split(' ')) res=n/2 res*=m print res
2、
n=int(raw_input()) a=map(int,raw_input().strip().split(' ')) a.sort() score_f=0 fori inrange(len(a)-1,-1,-2): score_f+=a[i] res=score_f-(sum(a)-score_f) printres
3、
import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Main { public static Set set = new HashSet(); public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { long days = sc.nextLong(); long value = sc.nextLong(); long left = 0; long right = value; while (left < right) { long mid = (right - left) / 2 + left; int temp = isValid(mid, days, value); if (temp < 0) { right = mid - 1; } else if (temp > 0) { left = mid + 1; } else { break; } } long res = (right - left) / 2 + left; if (isValid(res, days, value) < 0) { System.out.println(res - 1); } else { System.out.println(res); } } sc.close(); } public static int isValid(long start, long days, long value) { if (set.contains(start)) { return -1; } long temp = 0; for (int i = 0; i < days; i++) { temp += start; if (temp > value) { set.add(start); return -1; } start = (long) Math.ceil((double) (start / 2.0)); } return temp < value ? 1 : 0; } }
4、
K=int(raw_input()) a,na,b,nb=map(int,raw_input().strip().split(' ')) arr=[a for i in range(na)] brr=[b for j in range(nb)] M=1000000007 def get_value(n): if n==1: return n else: return n * get_value(n-1) def gen_last_value(n,m): first = get_value(n) second = get_value(m) third = get_value((n-m)) if n!=m else 1 return first/(second * third) if n!=m else 1 ans=0 for i in range(na+1): for j in range(nb+1): if a*i+b*j==K: if i!=0 and j!=0: ans+=gen_last_value(na,i)*gen_last_value(nb,j) elif i==0 and j==0: ans+=0 else: ans+=gen_last_value(na,i) if i!=0 else gen_last_value(nb,j) print int(ans%M)
5、
import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class Main { static class Pair { int time; int diff; public Pair(int time, int diff) { this.time = time; this.diff = diff; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int machineNum = sc.nextInt(); int taskNum = sc.nextInt(); Pair[] machines = new Pair[machineNum]; Pair[] tasks = new Pair[taskNum]; for (int i = 0; i < machineNum; i++) { machines[i] = new Pair(sc.nextInt(), sc.nextInt()); } for (int i = 0; i < taskNum; i++) { tasks[i] = new Pair(sc.nextInt(), sc.nextInt()); } Comparator<Pair> cmp = new Comparator<Pair>() { <a href="/profile/992988" data-card-uid="992988" class="js-nc-card" target="_blank" style="color: #25bb9b">@Override public int compare(Pair p1, Pair p2) { if (p1.time == p2.time) { return p2.diff - p1.diff; } else { return p2.time - p1.time; } } }; Arrays.sort(machines, cmp); Arrays.sort(tasks, cmp); long sum = 0; int count = 0; int j = 0; int[] dp = new int[101]; for (int i = 0; i < taskNum; i++) { while (j < machineNum && machines[j].time >= tasks[i].time) { dp[machines[j].diff]++; j++; } for (int k = tasks[i].diff; k < 101; k++) { if (dp[k] != 0) { dp[k]--; sum += 200 * tasks[i].time + 3 * tasks[i].diff; count++; break; } } } System.out.println(count + " " + sum); } sc.close(); } }
6、
import java.util.Arrays; import java.util.Scanner; public class DrawerQ { public static int count = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); int m = sc.nextInt(); char[][] chs = new char[n][m]; char[][] temp = new char[n][m]; for (int i = 0; i < n; i++) { String s = sc.next(); for (int j = 0; j < m; j++) { chs[i][j] = s.charAt(j); } Arrays.fill(temp[i], 'X'); } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (chs[i][j] != temp[i][j]) { if (chs[i][j] == 'Y' || (chs[i][j] == 'G' && temp[i][j] == 'B')) { right(temp, chs, i, j); count ++; }else if (chs[i][j] == 'B' || (chs[i][j] == 'G' && temp[i][j] == 'Y')) { left(temp, chs, i, j); count ++; }else if(chs[i][j] == 'G') { right(temp, chs, i, j); left(temp, chs, i, j); count += 2; } } } } System.out.println(count); } sc.close(); } public static void right(char[][] temp, char[][] chs, int i, int j) { while(i >= 0 && i < temp.length && j >= 0 && j < temp[0].length) { if (chs[i][j] == 'Y' && temp[i][j] == 'X') { temp[i][j] = 'Y'; } else if (chs[i][j] == 'G') { if(temp[i][j] == 'B') { temp[i][j] = 'G'; }else if(temp[i][j] == 'X') { temp[i][j] = 'Y'; } } else { break; } i ++; j ++; } } public static void left(char[][] temp, char[][] chs, int i, int j) { while(i >= 0 && i < temp.length && j >= 0 && j < temp[0].length) { if (chs[i][j] == 'B' && temp[i][j] == 'X') { temp[i][j] = 'B'; } else if (chs[i][j] == 'G') { if(temp[i][j] == 'Y') { temp[i][j] = 'G'; }else if(temp[i][j] == 'X'){ temp[i][j] = 'B'; } } else { break; } i ++; j --; } } }