A. Everyone Loves to Sleep
思路:把所有闹钟以及他睡觉的时间全部化成分钟然后排序,取睡觉时间的后一个作差,如果睡觉时间是最后一个就取序列中首位+24作差.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,n,x,h,m,hi,mi,k;
int main()
{
ios::sync_with_stdio(0);
cin>>t;
while(t--)
{
cin>>n>>h>>m;
int sum=0,s=0,f=0;
int a[1001];
a[0]=h*60+m;
f=a[0];
for(int i=1;i<=n;i++)
{
cin>>hi>>mi;
a[i]=hi*60+mi;
}
sort(a,a+n+1);
int *in;
in=find(a,a+n+1,f);
int w=in-a;
//cout<<w;
if(w+1<n+1)
{
s=a[w+1]-f;
sum=s/60;
s=s%60;
}
else{
s=a[0]-f+24*60;
sum=s/60;
s=s%60;
}
cout<<sum<<" "<<s<<endl;
}
}
B. Remove Prefix
思路:一开始看漏条件了想从前往后set,发现是从左向右一直删掉直到没有重复,从前往后set不行,所以从后往前map,如果当前数字m[a[i]]>1,跳出循环。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,n,x,h,m,k;
ll f[100001];
int main()
{
ios::sync_with_stdio(0);
cin>>t;
while(t--)
{
cin>>n;
int a[n];
int sum=0,s=0;
set<int>b;
map<int,int>y;
for(int i=1;i<=n;i++)
{
cin>>a[i];
//b.insert(a[i]);
// y[a[i]]++;
}
//set<int>::iterator it;
for(int i=n;i>=1;i--)
{
y[a[i]]++;
if(y[a[i]]==2)
{
break;
}sum++;
}
//sum=b.size();
cout<<n-sum<<endl;
}
}
C. Minimum Varied Number
思路:整数划分且要求构造出来和最小,所以从右到左从9开始。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,n,x,h,m,k;
ll f[100001];
int main()
{
ios::sync_with_stdio(0);
cin>>t;
while(t--)
{
cin>>n;
map<int,int>e,p;
int j=0;
for(int i=9;i>=1;i--)
{
p[i]++;
//cout<<p[i]<<endl;
if(n<10&&p[n]<1) break;
e[j]=i;
if(p[i]<=1)
n=n-i;
j++;
}
if(n!=0)
cout<<n;
for(int i=j-1;i>=0;i--)
{
cout<<e[i];
}
cout<<endl;
}
}
E. Add Modulo 10
思路://def补完一起写。