1
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int arr[1010][1010];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>arr[i][j];
}
}
for(int j=m;j>=1;j--){
for(int i=1;i<=n;i++){
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
}
2
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int n;
struct node{
int number,appear;
bool operator<(const node& t) const{
if(appear!=t.appear){
return appear>t.appear;
}
return number<t.number;
}
};
vector<node> v;
int ar[1010];
int main(){
cin>>n;
for(int i=0;i<n;i++){
int temp;
cin>>temp;
ar[temp]++;
}
for(int i=0;i<1010;i++){
if(ar[i]>0){
v.push_back({i,ar[i]});
}
}
sort(v.begin(),v.end());
for(int i=0;i<v.size();i++){
cout<<v[i].number<<" "<<v[i].appear<<endl;
}
}
3
参考博客
#include<iostream>
#include<algorithm>
using namespace std;
int a,b,c,y1,y2;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool leap(int x){
if(x%400==0) return true;
if(x%4==0&&x%100!=0) return true;
return false;
}
int main(){
cin>>a>>b>>c>>y1>>y2;
int p=1;
for(int i=1;i<a;i++){
p+=month[i];
}
p%=7;
int flag=(a>=3)?1:0;
for(int i=1850;i<y1;i++){
p+=365+(leap(i+flag)?1:0);
}
for(int i=y1;i<=y2;i++){
p%=7;
int day=0;
if(c<=p){
day=7*b+c-p;
}
else{
day=7*(b-1)+c-p;
}
month[2]=leap(i)?29:28;
if(day<=month[a]){
printf("%d/%02d/%02d\n",i,a,day);
}
else{
printf("none\n");
}
p+=365+(leap(i+flag)?1:0);
}
}
4(树的直径)
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,ans;
struct Edge{
int u,v,w,next;
}Edges[40020];
int head[20010],dis[20010],tot=1,s;
void add(int u,int v,int w){
Edges[tot].u=u;
Edges[tot].v=v;
Edges[tot].w=w;
Edges[tot].next=head[u];
head[u]=tot;
tot++;
}
void dfs(int x,int fa,int d){
dis[x]=d;
ans=max(ans,dis[x]);
if(dis[x]>dis[s]){
s=x;
}
for(int i=head[x];i!=-1;i=Edges[i].next){
if(Edges[i].v!=fa){
dfs(Edges[i].v,x,d+1);
}
}
}
int main(){
cin>>n>>m;
memset(head,-1,sizeof head);
for(int i=2;i<=n+m;i++){
int temp;cin>>temp;
add(temp,i,1);
add(i,temp,1);
}
s=1;
dfs(s,0,0);
dfs(s,0,0);
cout<<ans<<endl;
}
5 (30pts)
参考博客
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
struct edge{
int u,v,w,next;
}E[200010];
int n,m,head[100010],vis[100010],cost[100010],tot=1;
void addEdge(int u,int v,int w){
E[tot].u=u;
E[tot].v=v;
E[tot].w=w;
E[tot].next=head[u];
head[u]=tot;
tot++;
}
vector<int>path,PATH;
vector<long long>Dis,DIS;
void dfs(int u,int t){
if(u==t){
PATH=path;
DIS=Dis;
return;
}
for(int i=head[u];i!=-1;i=E[i].next){
if(!vis[E[i].v]){
vis[E[i].v]=true;
path.push_back(E[i].v);
Dis.push_back(E[i].w);
dfs(E[i].v,t);
path.pop_back();
Dis.pop_back();
}
}
}
int main(){
cin>>n>>m;
memset(head,-1,sizeof head);
for(int i=1;i<=n;i++){
cin>>cost[i];
}
for(int i=1;i<n;i++){
int x,y,w;cin>>x>>y>>w;
addEdge(x,y,w);
addEdge(y,x,w);
}
for(int i=1,f,t;i<=m;i++){
cin>>f>>t;
memset(vis,false,sizeof vis);
path.clear();
Dis.clear();
vis[f]=true;
path.push_back(f);
dfs(f,t);
long long dis=0,ans=0,_min=cost[f];
for(int i=0;i<PATH.size()-1;i++){
if(cost[PATH[i]]<_min){
ans+=dis*_min;
dis=0;
_min=cost[PATH[i]];
}
dis+=DIS[i];
}
ans+=_min*dis;
cout<<ans<<endl;
}
}