第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛(同步赛) (3)

用一个结构体存成绩学号性别,通过map的结构体解决情况1,再用set的数组解决情况2.

#include<bits/stdc++.h> using namespace std; typedef long long ll; struct ran { int grade, gender, id; }tr; map<string, ran>mp; set<string>se[120]; string s; int main() { int n;scanf("%d",&n); for(int i = 1; i <= n; i++){ cin>>s; scanf("%d%d%d",&tr.grade, &tr.gender, &tr.id); mp[s] = tr; se[tr.grade].insert(s); } int m; scanf("%d",&m); while(m--){ int t;scanf("%d",&t); if(t == 1){ cin>>s; printf("%d %d %d\n",mp[s].grade,mp[s].id,mp[s].gender); } else{ int x;scanf("%d",&x); for(auto y : se[x]){//用迭代器会超时,用auto不会 cout<<y<<'\n'; } } } return 0; } H-数羊 题目描述

憨憨小杨晚上睡不着觉,就开始数羊,她觉得一只一只数太慢了,突发奇想出了一种新的数羊方式,羊羊数量A(n,m)由两个整形变量n和m决定,计算方式如下:

img

现在给出n和m的值,请你帮小杨数数一共有多少只羊。

思路:

直接暴力枚举前十项,你就会发现规律

#include<bits/stdc++.h> using namespace std; typedef long long ll; inline int IntRead() { char ch = getchar(); int s = 0, w = 1; while(ch < '0' || ch > '9') { if(ch == '-') w = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { s = s * 10 + ch - '0', ch = getchar(); } return s * w; } //int f(int x, int y) //{ // if(x == 1 && y == 0) // { // tr[x][y] = 2; // return tr[x][y]; // } // else if(y >= 0 && x == 0) // { // tr[x][y] = 1; // return tr[x][y]; // } // else if(y == 0 && x >= 2) // { // tr[x][y] = x + 2; // return tr[x][y]; // } // else if(x >= 1 && y >= 1) // { // tr[x][y] = f(f(x - 1, y),y - 1); // return tr[x][y]; // } // // return f(f(n - 1),m-1); //} ll q_pow(ll a, ll b)//第三列是2的n次方,所以要用快速幂取模 { ll ans = 1; while(b > 0) { if(b & 1) { ans = ans * a %998244353; } a = a * a % 998244353; b >>= 1; } return ans % 998244353; } int main() { ll t, n, m; t = IntRead(); while(t--) { n = IntRead(); m = IntRead(); if(m == 0) { if(n == 0) printf("1\n"); else if(n == 1) printf("2\n"); else printf("%ld\n",n + 2); } else if(m == 1) { if(n == 0) printf("0\n"); else printf("%ld\n", 2 * n); } else if(m == 2) { if(n == 0) printf("0\n"); else printf("%ld\n",q_pow(2,n)); } } return 0; } I-买花 题目描述

情人节马上要到了,阳阳想送出n朵花给喜欢的妹妹,他打算提前开始买。但是,因为他有强迫症,所有的花要分k天买(k>1,即不能一天全买完),第一天他可以买任意朵花,之后每一天买花的数量为前一天的两倍,(如若第一天买4朵,第二天就要买8朵,以此类推)。

现在离情人节还有15天(k≤15),请你告诉阳阳,他能不能刚好买到n朵花。

题意:

要买n朵花,规则是第一天买任意朵,然后第二天比第一天多买一倍,最多买15天,花数是所有花的总和,问你能不能刚好买到n朵花。

思路:

买1朵的时候,花数f对于天数的函数为f(x) = 2 ^ x - 1.

所以我们只需要对n进行一次循环,看看能不能除尽这十五个数,如果可以就行,否则就不行。

这个题的输出我真的想喷,YES写成YE5,NO写成N0,这不认真看谁看的出来啊!这要是wa了就是在搞心态!

#include<bits/stdc++.h> using namespace std; typedef long long ll; ll tr[100]; int main() { ll t, n, x; cin>>t; while(t--) { x = 0; cin>>n; for(int i = 1; i <= 15; i++) { tr[i] = pow(2,i) - 1; } for(int i = 2; i <= 15; i++) { if(n % tr[i] == 0) { x = 1; // cout<<tr[i]<<endl; break; } } if(x) cout<<"YE5\n"; else cout<<"N0\n"; } return 0; } K-黑洞密码 题目描述

近些日子,某科学家接受到了来自外太空的神秘讯息,在经过了一段时间的研究后,科学家发现讯息是一个由字母和数字组成的字符串str,想要破译,需要通过一定的规则将字符串进行转换。规则如下:

1.确定讯息的长度为32;

2.字符串中第4n+1∼\sim∼4n+4的字母和第4n+14n+4的字母和第4n+14n+4的字母和第4n+1∼\sim∼4n+4(4n+4(4n+4(0≤n≤30 \leq n \leq 30≤n≤3)的数字为一组,共4组;

3.每组的第1,2,3,4个字符分别往后推每组第1,2,3,4个数字个数 例:如第一个字母为a,第一个数字为3,转换后变为d,'z'之后是'B','Z'之后是'b';

4.将每组内部字母的顺序颠倒;

5.将四组字符合并就是最后的讯息。

思路:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgdgzx.html