第 1 题:星期计算
思路:模拟
#include <iostream>
using namespace std;
int main()
{
int ans=1;
int n=20;
// 因为数据范围太大,所以每一次相乘都对7取余
while(n--)
{
ans*=20;
ans=ans%7;
}
// ans统计对7取余后剩余的天数,也即是一周的第ans天
ans+=6;
if(ans>7)
ans=ans%7;
cout<<ans<<endl;
}
第 2 题:考勤刷卡
思路:注意输入获取数据,最后排序输出
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int f[N];
map<int,bool>mp;
int main()
{
int n,k=0;
int a,b,c,d;
cin>>n;
while(n--)
{
scanf("%d:%d:%d %d",&a,&b,&c,&d);
if(!mp[d])f[k++]=d;
mp[d]=true;
}
sort(f,f+k);
for(int i=0;i<k;i++)
{
cout<<f[i]<<endl;
}
}
第 3 题:卡片
思路:实际上获得的卡片数量是Cn2(排列组合),也即是n=ans*(ans-1)/2,按照这个算式倒回去求ans即可。
#include<iostream>
#include<cmath>
using namespace std;
long long ans;
int n;
int main()
{
cin>>n;
ans=n*2;
ans=round(sqrt(ans));
cout<<ans<<endl;
}
第 4 题:最大子矩阵
#include<bits/stdc++.h>
using namespace std;
const int N=100;
const int M=1e5+10;
int f[N][M];
int row[N][2],col[M][2],colmax,rowmax,colmin,rowmin;
int main()
{
int n,m,limit;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>f[i][j];
colmin
}
}
}