题目问答
题目问答简介
求解代码问题,通过了三个案例
```c
[[
int uniquely(MGraph G) {
int v=G.numberVertices;
if (v==0) return 1;
int i=0,j=0,k=0,flag=-1;
for(k=0;k<v;v++){
flag=-1;
for(i=0;i<v;i++){
for(j=0;j<v;j++){
if(G.edge[j][i]) break;
}
if(j==v){
if (flag!=-1) return 0;
flag=i;
}
}
if(flag==-1) return 0;
for(int i=0;i<v;i++){
G.edge[flag][i]=0;
}
}
return 1;
}
```
查看全文
1
0
0
13
问题出在哪了捏
```cpp
#include<bits/stdc++.h>
using namespace std;
int m1[]={0,1,3,5,7,8,10,12};//数组m1存储大月
int m2[]={0,4,6,9,11};//数组m2存储小月
map<int,int> bh={{0,13},{1,1},{2,2},{3,3},{4,5},{5,4},{6,4},{7,2},{8,2},{9,2}};
int sum(int year,int month,int day){
int y1=year%10,y2=year%100,y3=year%1000,y4=year/1000;
int m1=month%10,m2=month/10;
int d1=day%10,d2=day/10;
int n=0;
n=bh[y1]+bh[y2]+bh[y3]+bh[y4]+bh[m1]+bh[m2]+bh[d1]+bh[d2];
return n;
}
int main(){
int num=0;
int year=2000,month=1,day=1;
int year2=2024,month2=4,day2=13;
while(1){
if(sum(year,month,day)>50) num++;
day++;
for(int j=1;j<=7;j++){
if(month==m1[j]&&day==32){
month++;
day=1;
break;
}
}
for(int j=1;j<=4;j++){
if(month==m2[j]&&day==31){
month++;
day=1;
break;
}
}
if(month==2){
if((year%4==0&&year%100!=0)||year%400==0){
if(day==30){
month++;
day=1;
}
}else{
if(day==29){
month++;
day=1;
}
}
}
if(month==13){
month=1;
year++;
}
if(year==year2&&month==month2&&day==day2) break;
}
cout<<num<<endl;
return 0;
}
```
查看全文
2
0
0
21
数据是不是弱了
试一下这组 hack
```text
10 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
```
查看全文
4
0
0
82
为什么我这个代码在蓝桥那能通过,在这通过不了
```cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n, m;
ll a[300010], diff[300010], sum[300010], lt[300010], rt[300010];
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
ll count = 0;
for (int i = 1; i <= m; ++i) {
cin >> lt[i] >> rt[i];
diff[lt[i]] += 1;
diff[rt[i]+1] -= 1;
}
for (int i = 1; i <= n; ++i) {
a[i] = a[i-1] + diff[i];
sum[i] = a[i] == 1 ? sum[i-1] + 1 : sum[i-1];
if (a[i] == 0) count++;
}
for (int i = 1; i <= m; ++i) {
cout << count + sum[rt[i]] - sum[lt[i]-1] << '\n';
}
return 0;
}
```
查看全文
1
0
0
21
为什么有一个样例没过呀
```cpp
//13.5分
#include<bits/stdc++.h>
using namespace std;
const int N = 13;
int g[N][N]; //输入数据
int d[N][N]; //-1为未经过,1为已经过
int p[N*N]; //存储答案
int cnt; // 表示当前答案数量
int n, k;
bool flag= true;//输出答案后,用于结束递归结束程序
void dfs(int u, int x,int y)
{
if(u==n*n-1&&x==n&&y==n)
{
for(int i = 1;i<=n*n-1;i++)
cout<<p[i];
flag = false;
return;
}
int dx[8] = {-1,-1,0,1,1,1,0,-1};
int dy[8] = {0,1,1,1,0,-1,-1,-1};
for(int i = 0;i<8;i++)
{
int x1 = x+dx[i];
int y1 = y+dy[i];
if(x1>=1&&x1<=n&&y1>=1&&y1<=n&&d[x1][y1]==-1)
{
if(g[x1][y1]==g[x][y]+1||(g[x1][y1]==0&&g[x][y]==k-1))
{
//表示不交叉
if(i==1&&d[x][y+1]!=-1&&d[x-1][y]!=-1) continue;
if(i==3&&d[x][y+1]!=-1&&d[x+1][y]!=-1) continue;
if(i==5&&d[x+1][y]!=-1&&d[x][y-1]!=-1) continue;
if(i==7&&d[x-1][y]!=-1&&d[x][y-1]!=-1) continue;
d[x1][y1]=1;
p[++cnt] = i;
dfs(u+1,x1,y1);
d[x1][y1]=-1;
cnt--;
if(!flag) return;
}
}
}
}
int main()
{
cin >> n>>k;
for(int i = 1;i<=n;i++)
for(int j = 1;j<=n;j++)
cin >> g[i][j];
memset(d, -1,sizeof d);
d[1][1] = 1;
dfs(0,1,1);
if(flag) cout << "-1";
return 0;
}
```
查看全文
3
0
0
67
测试案例有问题
我用最普通的并查集写,一开始没考虑相邻数才能传送,但是通过了,我感觉要加一条测试案例
5
2 1 3 5 4
代码如下
```c++
#include<bits/stdc++.h>
using namespace std;
class UnionFind{
public:
int n;
vector<int>fa;
vector<int>sz;
public:
UnionFind(int _n) :n(_n),fa(_n), sz(_n,1) {
for (int i = 0; i < n; i++) fa[i] = i;
}
int f(int i) {
if (fa[i] != i)fa[i]= f(fa[i]);
return fa[i];
}
void Union(int a, int b) {
int x = f(a), y = f(b);
if (x != y) {
if (sz[x] > sz[y]) {
fa[y] = x;
sz[x] += sz[y];
sz[y] = 0;
}
else {
fa[x] = y;
sz[y] += sz[x];
sz[x] = 0;
}
}
}
void res() {
sort(sz.begin(), sz.end(), [](int& a, int& b) {return a > b; });
cout << sz[0] + sz[1] << endl;
}
};
int main() {
int n;
cin >> n;
vector<int>nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
nums[i]--;
}
UnionFind un(n);
for (int i = 0; i < n; i++) {
un.Union(i, nums[i]);
}
un.res();
return 0;
}
```
查看全文
2
0
0
38
为啥我这样写也能过我感觉自己写错了但是能过数据是不是水了
```cpp
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
typedef pair<int,int>pii;
#define N 10100
int s[N],a[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin>>n;
vector<pii>v;
for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i];
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
v.push_back({s[j]-s[i-1],i});
}
}
sort(v.begin(),v.end());
int ans=1e18;
for(int i=0;i<v.size()-1;i++){
if(v[i].second!=v[i+1].second) ans=min(ans,v[i+1].first-v[i].first);
}
cout<<ans<<endl;
return 0 ;
}
```
查看全文
2
0
0
130



