2018届四川省大学生程序设计大赛传送门入口:
https://www.oj.swust.edu.cn/problem
题目是2804~2814
省赛榜单:
http://www.cs.swust.edu.cn/standing/standing.html
B题(2805,beyond the boundry):
题意:题目给定四个字符串。给一些测试串,如果该子串在题目中的4个字符串中出现过(只要按次序出现就行,不在意是否连续),先记录出现的次数,再输出该子串。
#include
#include
#include
using namespace std;
string str[4]={"Kanbara Akihito","Kuriyama Mirai","Nase Hiroomi","Nase Mitsuki"};
bool vis[4];
int main(){
int t;
cin>>t;
while(t--){
memset(vis,0,sizeof(vis));
string s;
cin>>s;
int n=s.size();
int flag=0;
for(int i=0;i<4;i++){
int m=str[i].size();
int count=0;
for(int j=0;j
E题(2808:Ever17):
给定一个日历,格式是月,日,年或者年,月,日。保证一定有一个格式是正确的,如果两次格式所对应的日期相同,输出该年月日,如果只有一种格式合法,也输出给年月日,否则输出两个日期相差的天数
#include
#include
#include
#include
using namespace std;
string data[13]={"0","January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November","December"};
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int d,int m,int y){
if(y%4==0&&y%100!=0||y%400==0)month[2]=29;
else month[2]=28;
if(d<=month[m]&&m<=12&&d>0&&m>0)
return true;
return false;
}
int ansdata(int d,int m,int y){
if(y%4==0&&y%100!=0||y%400==0)month[2]=29;
else month[2]=28;
y--;
int res=y*365+y/4-y/100+y/400;
for(int i=1;i>t;
while(t--){
int y0,m0,d0,y1,m1,d1;
scanf("%d/%d/%d",&m0,&d0,&y0);
y1=m0,m1=d0,d1=y0;
y0+=2000;
y1+=2000;
if(y0==y1&&m0==m1&&d0==d1){
cout<
H题(2811:harmony)
给两个数,求两个数相加然后加上两个数最小公倍数的值:
#include
using namespace std;
int gcd(int a,int b){
if(b==0)return a;
return gcd(b,a%b);
}
int main(){
int t;
cin>>t;
while(t--){
int n,m;
cin>>n>>m;
cout<
I题(2812 Island):
给定一棵树,和这颗树的权值,问删掉这颗顶点,求剩下的树的最大值,然后统计删掉每个顶点剩下树的最大值,求其中的最小值是多少。
#include
#include
#include
using namespace std;
#define ll long long
const int maxn=2e5+10;
int n,T;
int u,v;
ll cost[maxn],ans[maxn];
bool vis[maxn];
ll M[maxn];
ll val[maxn];
struct node{
int v,next;
}e[maxn];
int p[maxn],eid;
void init(){
for(int i=0;i