题目
题目一:模拟即可
#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
int cnt[maxn];
set<int>S;
vector<int>v[maxn];
int main()
{
int t;
cin>>t;
while(t--)
{
int num;
cin>>num;
S.insert(num);
int a,b,c;
char ch;
cin>>a>>ch>>b>>ch>>c;
int tt=a*3600+b*60+c;
v[num].push_back(tt);
}
set<int>::iterator iter=S.begin();
int tot=0;
for(;iter!=S.end();iter++)
{
cnt[tot++]=(*iter);
}
// for(int i=0;i<tot;i++)
// cout<<cnt[i]<<" ";
for(int i=0;i<tot;i++)
{
int tt=cnt[i];
sort(v[tt].begin(),v[tt].end());
/* for(int j=0;j<v[tt].size();j++)
{
cout<<v[tt][j]<<" ";
}
cout<<endl;
*/
}
for(int i=0;i<tot;i++)
{
int flag=0;
int tt=cnt[i];
if(v[tt].size()<5) continue;
else
{
for(int j=0;j<v[tt].size()-4;j++)
{
if(v[tt][j+4]-v[tt][j]<=3600)
{
flag=1;
break;
}
}
if(flag) cout<<cnt[i]<<endl;
}
}
return 0;
}
题目二:动态规划
#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll dp[10][maxn];
//dp[i][j]长度为j,以i结尾的数字.
int main()
{
int n;
cin>>n;
for(int i=0;i<=9;i++)
dp[i][1]=1;
for(int i=2;i<=n;i++)
{
dp[0][i]=(dp[0][i]+dp[8][i-1])%mod;
dp[1][i]=(dp[1][i]+dp[2][i-1]+dp[4][i-1])%mod;
dp[2][i]=(dp[2][i]+dp[1][i-1]+dp[3][i-1]+dp[5][i-1])%mod;
dp[3][i]=(dp[3][i]+dp[2][i-1]+dp[6][i-1])%mod;
dp[4][i]=(dp[4][i]+dp[1][i-1]+dp[5][i-1]+dp[7][i-1])%mod;
dp[5][i]=(dp[5][i]+dp[2][i-1]+dp[4][i-1]+dp[6][i-1]+dp[8][i-1])%mod;
dp[6][i]=(dp[6][i]+dp[3][i-1]+dp[5][i-1]+dp[9][i-1])%mod;
dp[7][i]=(dp[7][i]+dp[4][i-1]+dp[8][i-1])%mod;
dp[8][i]=(dp[8][i]+dp[5][i-1]+dp[7][i-1]+dp[9][i-1]+dp[0][i-1])%mod;
dp[9][i]=(dp[9][i]+dp[6][i-1]+dp[8][i-1])%mod;
}
ll ans=0;
for(int i=0;i<=9;i++)
ans=(ans+dp[i][n])%mod;
cout<<ans<<endl;
return 0;
}