小明数列        时间限制: 1000MS        内存限制: 65536KB        题目描述:        小明了解了递归函数,十分喜欢递归这一概念。他用递归的概念定义了一个数列{an},其中a0和a1均为1,对于i≥2,        ai=ai-1*A+ai-2*B。递归定义让小明十分开心,但是算起来却很痛苦,现在小明想让你帮他算一算。考虑到数列可能很大,小明觉得你告诉他对应项模上M之后的答案就可以了(数列中的每一个数叫做这个数列的项)。        输入描述        第一行三个数A,B,M,含义见题面。        接下来一行一个数Q,表示小明询问次数。        接下来一行Q个数q1,q2,...,qQ,第i个数qi表示小明第i次询问数列第qi项模上数字M后的答案。        对于所有数据,1≤Q,qi≤50000,1≤A,B,M≤108        输出描述        一行Q个数,依次表示每次答案。        样例输入        1 1 4        4        1 2 3 4        样例输出        1 2 3 1        提示        样例解释        ① a1=1        ② a2=a0+a1=2        ③ a3=a1+a2=3        ④ a4=a2+a3=5        但是都要对 4 取模,因此答案分别为1 2 3 1#include <bits/stdc++.h>using namespace std;long long s[50005];long long a, b, m;void f(int i) { if (i == 50003)  return; s[i] = ((s[i - 1] * a) % m + (s[i - 2] * b) % m) % m; f(i + 1);}int main () { int q, qi; s[0] = 1; s[1] = 1; scanf("%lld %lld %lld", &a, &b, &m); f(2); scanf("%d", &q); for (int i = 0 ; i < q; i++) {  scanf("%d", &qi);  printf("%lld\n", s[qi]); }}最大最小值        时间限制: 1000MS        内存限制: 65536KB        题目描述:        有一个长度为n的序列,其中第i个元素ai,你现在可以对这个序列进行最多k次操作,每次可选择一个连续的区间将其中的元素删掉,但剩余的元素个数必须大于0。 现在想让剩余元素的最小值尽可能大,求上述情况下的最大值。        输入描述        第一行两个正整数n和k,分别表示初始序列中元素的个数以及最多的操作次数。        接下来1行,n个正整数,其中第i个数为ai。        对于所有数据,1<=n<=10^5,0<=k<=10^5,1<=ai <=10^6。        输出描述        输出仅包含一个正整数,表示答案。        样例输入        8 1        58 57 86 89 25 26 61 42        样例输出        58#include <bits/stdc++.h>using namespace std;int main() { int n, k; int a[1000005]; scanf("%d %d", &n, &k); int minv = 0x3f3f3f3f, minp, maxv = 0, maxp; for (int i = 0; i < n; i++) {  scanf("%d", &a[i]);  if (minv > a[i]) {   minv = a[i];   minp = i;  }  if (maxv < a[i]) {   maxv = a[i];   maxp = i;  } } if (k >= 2) {  printf("%d\n", maxv); } else if (k == 0) {  printf("%d\n", minv); } else {  k == 1  if (maxp == 0 || maxp == n - 1) {   printf("%d\n", maxv);  } else {   if (minp > maxp) {    int secondsmall = 0x3f3f3f3f;    for (int i = 0; i < n; i++) {     if (a[i] < secondsmall && a[i] != minv) {      secondsmall = a[i];     }    }    int boundv  = max(a[0], a[n - 1]);    if (boundv > secondsmall) {     printf("%d\n", boundv);    } else {     int maxx = 0;     for (int i = 0; i < maxp; i++) {      if (maxx < a[i]) {       maxx = a[i];      }     }     printf("%d\n", maxx);    }   } else if (minp < maxp) {    int secondsmall = 0x3f3f3f3f;    for (int i = 0; i < n; i++) {     if (a[i] < secondsmall && a[i] != minv) {      secondsmall = a[i];     }    }    int boundv  = max(a[0], a[n - 1]);    if (boundv > secondsmall) {     printf("%d\n", boundv);    } else {     int maxx = 0;     for (int i = maxp + 1; i < n; i++) {      if (maxx < a[i]) {       maxx = a[i];      }     }     printf("%d\n", maxx);    }   } else {    printf("%d\n", maxv);   }  } }}球        时间限制: 3000MS        内存限制: 589824KB        题目描述:        小明有很多个袋子,每个袋子里都装了一些彩色的球。        现在小明想知道他的这些袋子是否同时满足以下三个条件:        1. 对于每个袋子,其中的球颜色两两不同。        2. 每个袋子都装着相同数量的球。        3. 对于每一种颜色,其要么仅出现在一个袋子中要么出现在所有袋子中。        输入描述        第一行有一个正整数T(1<=T<=10),代表有多少组测试数据。接下来是T组测试数据,每组由数行构成。        每一组测试数据的第一行有一个数n(2<=n<=100),代表小明有多少个袋子。接下来的n行每行代表一个袋子。        接下来n行每一行的开头有一个数c(1<=c<=100),代表这个袋子中的球数。在c之后有c个正整数,分别代表这个袋子中每个球的颜色。        颜色编号均为0到2^32-1之间的非负整数。        输出描述        对于每组测试数据,如果小明的这些袋子满足全部三个条件,则在一行中先输出Yes,然后按编号大小输出所有袋子共有的颜色编号。在这种情况下如果没有一种颜色为所有袋子共有,则直接换行。        如果小明的这些袋子不满足以上的至少一个条件,则输出No。        样例输入        4        3        4 3 5 8 6        4 2 6 4 5        4 6 7 1 5        3        4 4 5 8 6        4 2 6 4 5        4 6 7 1 4        3        2 1 2        2 3 4        2 5 6        3        2 1 2        2 2 1        2 1 2        样例输出        Yes 5 6        No        Yes        Yes 1 2import java.util.*;public class Main {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int t = in.nextInt();        while(t-- > 0) {            int markNum = -1;            boolean gg = false;            HashSet<Long> hashSet = null;            HashMap<Long, Integer> hashMap = new HashMap<>();            int n = in.nextInt();            for(int i = 0; i < n; i++) {                int num = in.nextInt();                if(markNum != -1 && num != markNum) {                    gg = true;// 条件2                    //System.out.println("条件2");                }                markNum = num;                hashSet = new HashSet<>();                for(int j = 0; j < num; j++) {                    long a = in.nextLong();                    if(hashSet.contains(a)) {                        gg = true;// 条件1                        //System.out.println("条件1");                    }                    hashSet.add(a);                    hashMap.put(a, hashMap.getOrDefault(a, 0) + 1);                }            }            List<Long> ans = new ArrayList<>();            Collections.sort(ans);            for(Map.Entry<Long, Integer> entry : hashMap.entrySet()) {                int v = entry.getValue();                if(v != 1 && v != n) {                    gg = true;// 条件3                    //System.out.println("条件3");                    break;                }                if(v == n) {                    ans.add(entry.getKey());                }            }            if(gg) {                System.out.println("No");            } else {                System.out.print("Yes");                if(ans.size() != 0) {                    for(int k = 0; k < ans.size(); k ++) {                        System.out.print(" " + ans.get(k));                    }                }                System.out.println();            }        }    }}
点赞 14
评论 6
全部评论

相关推荐

07-22 13:50
门头沟学院 Java
仁者伍敌:其实能找到就很好了,当然收支能抵
点赞 评论 收藏
分享
码农索隆:竞争压力小,就你一个不用卷
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务