

一个人设了n个闹钟,然后他在h:m的时候睡下去,闹钟响起来的时候起床,问能睡多久
我们可以把闹钟按时间从小到大排序,然后在第一个大于睡下去的闹钟响起的时候来计算差值,如果没有这个闹钟就用第一个闹钟+1440来计算差值
- #include
- using namespace std;
-
- int arr[15];
-
- int main(){
- int t;
- cin >> t;
- while(t--){
- int n, h, m;
- int a;
- cin >> n >> h >> m;
- a = h * 60 + m;
- for(int i = 0; i < n; i++){
- cin >> h >> m;
- arr[i] = h * 60 + m;
- }
- sort(arr, arr + n);
- bool f = 0;
- for(int i = 0; i < n; i++){
- if(arr[i] >= a){
- cout << (arr[i] - a) / 60 << " ";
- cout << (arr[i] - a) % 60 << endl;
- f = 1;
- break;
- }
- }
- if(!f){
- cout << (arr[0] + 1440 - a) / 60 << " " << (arr[0] + 1440 - a) % 60 << endl;
- }
- }
- return 0;
- }


有n个数,你可以多次删除第一个数,问能否使删除后的数组中每个数只出现一次,求删除的数的数量
我们可以从后往前遍历,然后记录每个数字是否出现过,如果这个数已经出现过,那么这个数及前面的数都要删除
- #include
- using namespace std;
-
- int arr[200005];
- bool vis[200005];
-
- int main(){
- int t;
- cin >> t;
- while(t--){
- int n;
- cin >> n;
- for(int i = 1; i <= n; i++){
- cin >> arr[i];
- vis[i]= 0;
- }
- bool f = 0;
- for(int i = n; i >= 1; i--){
- if(vis[arr[i]]){
- f = 1;
- cout << i << endl;
- break;
- }
- vis[arr[i]] = 1;
- }
- if(!f){
- cout << 0 << endl;
- }
- }
- return 0;
- }

有一个数n,求拆成字典序最小的多个数之和,每个数只能出现一次
如果这个数小于10,那么就是本身,否则我们就按9.8.7的顺序依次递减,直到剪不了了为止
- #include
- using namespace std;
-
-
- int main(){
- int t;
- cin >> t;
- while(t--){
- int n;
- cin >> n;
- if(n < 10){
- cout << n << endl;
- }else{
- int a = 9;
- string s = "";
- while(n >= a && n && a){
- s = char(a + '0') + s;
- n -= a;
- a--;
- }
- if(n){
- s = char(n + '0') + s;
- }
- cout << s << endl;
- }
- }
- return 0;
- }



有n个数,每个数可以多次累加取模10后的值,问能否使所有数都相同
0 0 0 0 0 0
1 2 4 8 6 2
2 4 8 6 2 4
3 6 2 4 8 6
4 8 6 2 4 8
5 0 0 0 0 0
6 2 4 8 6 2
7 4 8 6 2 4
8 6 2 4 8 6
9 8 6 2 4 8
这是每个个数数多次累加的结果
可以得出0,5可互相转换,其他可以互相转换,而且2转换到下一个2会加20
所以这些不能既含0,5,也含其他
如果只含0,5,就全转换为个位为0,判断是否相同
如果只含其他就转换为个位为2,看十位以上的奇偶性是否相同
- #include
- using namespace std;
-
- int arr[200005];
-
- int main(){
- int t;
- cin >> t;
- while(t--){
- int n;
- cin >> n;
- int a = 0;
- for(int i = 0; i < n; i++){
- cin >> arr[i];
- if(arr[i] % 10 == 0 || arr[i] % 10 == 5){
- a++;
- }
- }
- if(a != n && a != 0){
- cout << "No" << endl;
- }else if(a == n){
- bool f = 0;
- for(int i = 0; i < n; i++){
- while(arr[i] % 10 == 5){
- arr[i] += 5;
- }
- if(i != 0 && arr[i] / 10 != arr[i - 1] / 10){
- cout << "No" << endl;
- f = 1;
- break;
- }
- }
- if(!f){
- cout << "Yes" << endl;
- }
- }else{
- bool f = 0;
- for(int i = 0; i < n; i++){
- while(arr[i] % 10 != 2){
- arr[i] += arr[i] % 10;
- }
- if(i >= 1){
- int ans = arr[i] / 10;
- int cnt = arr[i - 1] / 10;
- if(ans % 2 != cnt % 2){
- f = 1;
- cout << "No" << endl;
- break;
- }
- }
-
- }
- if(!f){
- cout << "Yes" << endl;
- }
- }
- }
- return 0;
- }