? ? ? ? 模拟、贪心。首先将上床时间转换为总的分钟数,设为sum,接着读入每一个闹钟,与sum相减,记录差值的最小值。若为负则证明是隔夜闹钟,此时加上24*60(一天总分钟数)调至同一天,再进行记录即可。
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=2e5+5;
int a[N];
void solve(){
int n,bh,bm;cin>>n>>bh>>bm;
int sum=bh*60+bm;
int ans=999999;
for(int i=1;i<=n;i++){
int h,m;cin>>h>>m;
int tem=h*60+m-sum;
if(tem<0) tem+=24*60;//解决隔天闹钟
ans=min(tem,ans);
}
cout<<ans/60<<" "<<ans%60<<endl;
}
//多组输入
signed main(){
ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);//解绑
int t=1;
cin>>t;
while(t--) solve();
return 0;
}
? ? ? ? 模拟、思维。由题意得,只需要维护序列内没有相同数字。不妨逆向思维,从序列最后开始,当序列出现一对相同数字时,则直接输出该数字的位置,即从左到右删到该处能保证剩余序列没有相同数字。
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=2e5+5;
int a[N],num[N];
void solve(){
memset(num,0,sizeof num);
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=n;i>=1;i--){
if(num[a[i]]){
cout<<i<<endl;
return;
}
num[a[i]]++;
}
cout<<"0"<<endl;
}
//多组输入
signed main(){
ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);//解绑
int t=1;
cin>>t;
while(t--) solve();
return 0;
}
? ? ? ? 暴力枚举、模拟、排序。只需要一个个试出来,最后排一次序即可。
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=2e5+5;
int a[N];
void solve(){
int n;cin>>n;
string ans;
int sum=n;
for(int i=9;i>=1;i--){
if(sum>=i){
ans+=('0'+i);
sum-=i;
}
}
sort(ans.begin(),ans.end());
cout<<ans<<endl;
}
//多组输入
signed main(){
ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);//解绑
int t=1;
cin>>t;
while(t--) solve();
return 0;
}
? ? ? ? 数学、思维。由题目给的样例可以得到规律,经过多次操作后,尾数总会是2,4,8,6的循环或是5,0的循环。若为奇数时,1->2,3->6,7->4,9->8,5->0可以保持规律。因此该题只需要讨论5的倍数与其他。
????????当序列内出现5的倍数时,仅当序列内其他所有数字全部为5的倍数时,才能满足题意。
? ? ? ? 讨论其他数字时,我们可以进行模拟题目操作,通过判断操作后数字是否相等来判断是否符合题意。而要实现有两个关键点:1.将所有的数据操作至以2为尾数(当然4,6,8也行,只要统一就行)2.上述找规律可发现,当经过一轮2,4,8,6的循环时,会比原始数字加20,故我们可以对20取模,保证数字相等。
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=2e5+5;
int a[N];
void solve(){
int n;cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int cnt=0;
for(int i=1;i<=n;i++) if(a[i]%5==0) cnt++;
if(cnt>0&&cnt<n){
cout<<"No"<<endl;
return;
}
for(int i=1;i<=n;i++){
//将尾数调整统一调整为2或0
while(a[i]%10!=2&&a[i]%10!=0){
a[i]+=a[i]%10;
}
}
if(!cnt) for(int i=1;i<=n;i++) a[i]%=20;
for(int i=2;i<=n;i++){
if(a[i]!=a[i-1]){
cout<<"No"<<endl;
return;
}
}
cout<<"Yes"<<endl;
}
//多组输入
signed main(){
ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);//解绑
int t=1;
cin>>t;
while(t--) solve();
return 0;
}
? ? ? ? 本蒟蒻暂时不会D题,待更新ToT。