1.图像旋转
#include<iostream>
using namespace std;
#define N 1010
int a[N][N];
int n,m;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
for(int i=m-1;i>=0;i--)
{
for(int j=0;j<n;j++)
cout<<a[j][i]<<" ";
cout<<endl;
}
}
2.数字排序
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
#define N 1010
struct node{
int x,c;
bool operator<(const node &n)const{
if(c!=n.c)
return c>n.c;
return x<n.x;
}
};
int a[N]={0};
vector<node> vec;
int main(){
int n;
cin>>n;
while(n--){
int t;
cin>>t;
a[t]++;
}
for(int i=0;i<N;i++){
if(a[i]){
vec.push_back((node){i,a[i]});
}
}
sort(vec.begin(),vec.end());
for(int i=0;i<vec.size();i++)
cout<<vec[i].x<<" "<<vec[i].c<<endl;
}
3.节日
- printf("%0xd"); 可以补x位前导0
- 遇到日期题先敲is_leap和get_days模板
- y总的思路简单好用(y总牛逼!!)
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
#define N 1010
int day[13]={
0,31,28,31,30,31,30,31,31,30,31,30,31
};
int is_leap(int y){
return y%400==0||(y%4==0&&y%100!=0);
}
int get_days(int y,int m)//求某月有多少天
{
if(m==2&&is_leap(y)) return day[m]+1;
return day[m];
}
int days=1; //1850年1月1日是星期2
int main(){
int a,b,c,y1,y2;
cin>>a>>b>>c>>y1>>y2;
for(int y=1850;y<=y2;y++){
for(int m=1;m<=12;m++){
if(y>=y1&&m==a){
int w=days; //得到这个月的第一天的星期数
int cnt=0;
int flag=1;
for(int d=0;d<get_days(y,m);d++){
if(w+1==c) cnt++;
if(cnt==b&&flag) printf("%04d/%02d/%02d\n",y,m,d+1),flag=0;
w=(w+1)%7;
}
if(flag)
printf("none\n");
}
days=(days+get_days(y,m))%7;
}
}
}
4.网络延时
(求数的直径问题
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<map>
#include<vector>
using namespace std;
#define N 10010
vector<int> G[2*N];
int dis[2*N];
struct node{
int v,n;
};
void dijstra(int st){
//迪杰斯特拉算法:
memset(dis,-1,sizeof(dis));
queue<node> q;
q.push((node){0,st});
while(q.size()){
node top=q.front();
q.pop();
int n=top.n;
if(dis[n]!=-1) continue;
dis[n]=top.v;
int v=top.v;
for(int i=0;i<G[n].size();i++){
q.push((node){v+1,G[n][i]});
}
}
}
int main(){
int n,m;
cin>>n>>m;
//前n位表示交换机,后m位表示电脑
//找树的直径
for(int i=2;i<=n;i++){
int t;
cin>>t;
G[i].push_back(t);
G[t].push_back(i);
}
for(int i=1;i<=m;i++){
int t;
cin>>t;
G[i+n].push_back(t);
G[t].push_back(i+n);
}
dijstra(1);
int mv=0,mp=0;
for(int i=1;i<=n+m;i++){
if(dis[i]>mv) {
mv=dis[i];
mp=i;
}
}
dijstra(mp);
for(int i=1;i<=n+m;i++){
if(dis[i]>mv) {
mv=dis[i];
}
}
cout<<mv;
}